From: sinara@... Date: 1997-01-16T22:19:33+09:00 Subject: [ruby-list:1732] Re: [Q] Use of Thread and Mutex 原です。 > いやあ,ちゃいます.本業とのコンテキストスイッチの間に情報 > が落ちちゃったみたいです(ぼけてるともいう). 無意識のうちに「原です。」を避けてるのでは?:-) > |【2】[ruby-list 1696] で述べた thread.rb の class Queue は、うま > |く動作しないことがあるのではないかという話ですが、確かに次のスク > |リプトは、結構早く止まってしまいます。 > そうですね.popを保護したらちゃんと動作するようになったみた > いです.うーむ,threadは難しい. 難しいです。私には動いていること自体不思議だ。 ところで、class Queue の pop ですが、パッチでは Thread.stop の 後で @que.shift を入れるのを忘れています。直すとこんな感じかな。 def pop non_block=FALSE loop do Thread.exclusive do return @que.shift if @que.length > 0 end raise ThreadError, "queue empty" if non_block @waiting.push Thread.current Thread.stop end end これでも、 return @que.shift if @que.length > 0 と @waiting.push Thread.current の間で他の thread の Queue#push が動いたら run してもらえなくて 困る気がしますが。 ---===-=-=-=-=-=-=-=-=======--=-=-=-==-=-===-=-=-=-=-=-=--=-==-=-- Shin-ichro Hara(Nagaoka Univ.of Tech.)