From: matz@... (Yukihiro Matsumoto) Date: 2002-05-31T16:34:27+09:00 Subject: [ruby-dev:17246] Re: race condition on Queue#pop? まつもと ゆきひろです In message "[ruby-dev:17224] Re: race condition on Queue#pop?" on 02/05/30, 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で実装すべきか。