なかだです。

At Thu, 30 May 2002 10:15:11 +0900,
Tanaka Akira wrote:
> なんとなく thread.rb を眺めていて、Queue#pop に race condition がある
> のではないかという気がしてきました。
(snip)
> 残念ながら、この問題を発現させるテストスクリプトを作ることはできません
> でしたが、このようなことがおきない保証はどこかにあるでしょうか?
> もし、保証できないなら、次のようなパッチを当てるといいんじゃないかと思
> います。

Mutex#lockと揃えてこんなのとか。

  def pop(non_block=false)
    begin
      while (Thread.critical = true; @que.empty?)
	raise ThreadError, "queue empty" if non_block
	@waiting.push Thread.current
	Thread.stop
      end
      @que.shift
    ensure
      Thread.critical = false
    end
  end

そういえばMutex#lockにも、Thread.stopのところでスイッチすると後
から来たのに割り込まれるというのがあったような。

-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦