ruby多线程生产者消费者
时间: 2023-06-28 17:13:46 浏览: 66
下面是一个简单的 Ruby 生产者消费者多线程实现:
```ruby
buffer = []
mutex = Mutex.new
empty = ConditionVariable.new
full = ConditionVariable.new
producer = Thread.new do
loop do
mutex.synchronize do
while buffer.size >= 10 # 缓冲区已满,等待消费者消费后再生产
full.wait(mutex)
end
item = produce_item
buffer.push(item)
empty.signal # 通知消费者
end
end
end
consumer = Thread.new do
loop do
mutex.synchronize do
while buffer.empty? # 缓冲区为空,等待生产者生产后再消费
empty.wait(mutex)
end
item = buffer.shift
full.signal # 通知生产者
end
consume_item(item)
end
end
producer.join
consumer.join
```
这个例子中,生产者线程不断地生产物品,如果缓冲区满了就等待消费者消费后再继续生产。消费者线程不断地消费物品,如果缓冲区为空就等待生产者生产后再继续消费。使用互斥锁和条件变量来控制线程间的同步和通信。