From: Okada Jun Date: 2001-05-13T14:11:18+09:00 Subject: [ruby-dev:13169] SizedQueue#pop causes deadlock 岡田です。 SizedQueue#popですけど、実装が次のようでないとまずいのでは無いでしょうか? --- thread.rb.old Sun May 13 14:02:16 2001 +++ thread.rb Sun May 13 14:03:33 2001 @@ -253,6 +253,7 @@ end def pop(*args) + retval = super Thread.critical = true if @que.length < @max begin @@ -265,7 +266,7 @@ end t.run if t end - super + retval end def num_waiting このパッチを当てた状態でないと ruby -r thread -e 'q = SizedQueue.new(1); q.push(1); Thread.new{sleep 1; q.pop}; q.push(1);' というコードでdeadlockが起こってしまいます。 -- ゆん(岡田 潤) yun@nekome.net http://www.nekome.net/