Queueのどうでも良い話
thread.rbでQueue#.popがこのように定義されている。
def pop(non_block=false) @mutex.synchronize{ while true if @que.empty? raise ThreadError, "queue empty" if non_block @waiting.push Thread.current @mutex.sleep else return @que.shift end end } end
そこで、次のようなコードを実行すると
require 'thread' queue = Queue.new t = Thread.start do loop{ queue.pop } end 2.times do nil until t.stop? t.wakeup end nil until t.stop? queue.instance_eval{ p @waiting } p queue.num_waiting
以下のようになる。
[#<Thread:0x00000001899698 sleep>, #<Thread:0x00000001899698 sleep>, #<Thread:0x00000001899698 sleep>] 3
本当にどうでも良い。