Ruby中的并发生产者/消费者

时间:2014-04-21 00:17:12

标签: ruby multithreading

我试图在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中不起作用。显然,您无法在一个线程中锁定互斥锁,然后在另一个线程中解锁它。还有另一种方法吗?

谢谢!

0 个答案:

没有答案