From: sinara@... Date: 1997-01-17T18:59:31+09:00 Subject: [ruby-list:1751] Re: [Q] Use of Thread and Mutex 原です。 Mutex で deadlock を起こすので、原因を探っていたんですが、 def lock while not try_lock @waiting.push Thread.current Thread.stop end end で、try_lock が FALSE となり、Thread.current を push する 直前に lock をかけていたスレッドが unlock したばあい、自分 を再 start してくれる機会がなくなって、いずれ deadlock に なりそうです。したがって、try_lock を込みで exclusive にす べきですね。こんな風に。 def lock loop do Thread.exclusive do if not @locked @locked=TRUE return end @waiting.push Thread.current end Thread.stop end end で、ここでもやはり class Queue と同様に Thread.stop する前に に run が済んでしまう事が起こり得ます。いずれ deadlock が起 こりそうです。結局 Mutex#unlock, Queue#push ともに、スレッド がちゃんと stop するのを待って run すれば、全て解決しそうで すが? それから前回 Hash では参照も排他的にやらなければならないので は?と思いましたが、変な例をみつけて、また分からなくなってし まいました。 ---===-=-=-=-=-=-=-=-=======--=-=-=-==-=-===-=-=-=-=-=-=--=-==-=-- Shin-ichro Hara(Nagaoka Univ.of Tech.)