まつもと ゆきひろです

In message "[ruby-dev:17224] Re: race condition on Queue#pop?"
    on 02/05/30, nobu.nakada / nifty.ne.jp <nobu.nakada / nifty.ne.jp> writes:

|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のところでスイッチすると後
|から来たのに割り込まれるというのがあったような。

やっぱり、MutexやQueueはCで実装すべきか。