MutexとConditionVariable

RubyのMutexとConditionVariableを使ってProducer-Consumerを作ってみました。ブロックするキューBlockingQueueクラスです。
Mutexクラスはリエントラントではないのでちょっと注意が必要でした。

require 'thread'

class BlockingQueue
  def initialize
    @queue = []
    @cv = ConditionVariable.new
    @mutex = Mutex.new
  end

  def enqueue(e)
    @mutex.synchronize do
      @queue << e
      @cv.signal
      # self  ←疑問:ここで、selfを返したほうがよいと思いますか?>識者のみなさま
    end
  end

  def dequeue
    @mutex.synchronize do
      while @queue.length == 0
        @cv.wait(@mutex)
      end
      @queue.shift
    end
  end
end

q = BlockingQueue.new

t = Thread.new do
  k = 1
  loop do
    # puts k
    q.enqueue(k)
    k += 1
  end
end

u = Thread.new do
  loop do
    puts q.dequeue
  end
end

t.join
u.join

疑問: そういえば、refeで表示されるドキュメントのtypoを見つけました。これはどこにお知らせすればよろしいのでしょうね…。

refe Mutex#synchronize
s/ロックを開放/ロックを解放/