From: Yusuke Endoh Date: 2010-05-06T20:07:04+09:00 Subject: [ruby-dev:41185] [Feature #3251] allow to unlock mutex locked by another thread チケット #3251 が更新されました。 (by Yusuke Endoh) 遠藤です。 2010年5月6日1:55 SASADA Koichi : >  Python はなぜ Mutex を他から解放できるのか,よくわからないのですが, > *snip* > > ということで,Mutex という名前だと,他から解放出来ない,というニュアンス > が含まれてるんじゃないかなぁ,という感覚があります. そういえば Python では Lock という名前です。 よくわかりませんが、マニュアルを見る感じ mutex とは明確に区別されて いるようです。さすが Python 先生。 > 他のシステムだと,セマフォがあるからいいじゃん,ということなのかもしれ > ず,じゃぁ Ruby にもセマフォを入れないといけない,ということかもしれません. それなら Semaphore を作りましょうかねえ。 まあ、順序付き Map を Hash と呼ぶ Ruby なら些細な話ではないかという 気もしますが。 2010年5月6日17:09 KOSAKI Motohiro : > semaphoeセマンティクスだとABBAデッドロックを検知しても第三者が、 > unlockしてくれることで実はちゃんと動くかも知れないので、実用的な > lock validatorの実装がむつかしいと。 第三者は unlock は呼べませんが、Thread#raise や Thread#kill を呼ぶ ことができるので、ABBA deadlock から抜け出せる可能性があります。 恐ろしいことに。 なので Ruby の deadlock 検出は、「生きている全スレッドがロック解放 待ち、または無期限 sleep で休止中」という、非常に保守的な判定で実装 されてます。1 つでも実行中のスレッドがあるなら deadlock を報告する ことはありません。 -- Yusuke Endoh ---------------------------------------- http://redmine.ruby-lang.org/issues/show/3251 ---------------------------------------- http://redmine.ruby-lang.org