我试图在Ruby中实现类似于生产者消费者问题的东西。这是我的实施:
class ProducerConsumerQueue
def initialize
@queue = []
@queue_lock = Mutex.new
@queue_write_lock = Mutex.new
@queue_lock.lock
end
def produce product
@queue_write_lock.synchronized do
@queue << product
@queue_lock.unlock if @queue_lock.locked?
end
end
def consume
@queue_lock.lock
@queue_write_lock.synchronized { @queue.pop }
end
end
我认为这是一个很好的实现,因为
consume
方法。 但问题是,这种实现在Ruby中不起作用。显然,您无法在一个线程中锁定互斥锁,然后在另一个线程中解锁它。还有另一种方法吗?
谢谢!