チケット #3251 が更新されました。 (by Yusuke Endoh)


遠藤です。

2010年5月6日1:55 SASADA Koichi <ko1 / atdot.net>:
>  Python はなぜ Mutex を他から解放できるのか,よくわからないのですが,
>
*snip*
>
> ということで,Mutex という名前だと,他から解放出来ない,というニュアンス
> が含まれてるんじゃないかなぁ,という感覚があります.

そういえば Python では Lock という名前です。
よくわかりませんが、マニュアルを見る感じ mutex とは明確に区別されて
いるようです。さすが Python 先生。


> 他のシステムだと,セマフォがあるからいいじゃん,ということなのかもしれ
> ず,じゃぁ Ruby にもセマフォを入れないといけない,ということかもしれません.

それなら Semaphore を作りましょうかねえ。
まあ、順序付き Map を Hash と呼ぶ Ruby なら些細な話ではないかという
気もしますが。


2010年5月6日17:09 KOSAKI Motohiro <kosaki.motohiro / gmail.com>:
> semaphoeセマンティクスだとABBAデッドロックを検知しても第三者が、
> unlockしてくれることで実はちゃんと動くかも知れないので、実用的な
> lock validatorの実装がむつかしいと。

第三者は unlock は呼べませんが、Thread#raise や Thread#kill を呼ぶ
ことができるので、ABBA deadlock から抜け出せる可能性があります。
恐ろしいことに。

なので Ruby の deadlock 検出は、「生きている全スレッドがロック解放
待ち、または無期限 sleep で休止中」という、非常に保守的な判定で実装
されてます。1 つでも実行中のスレッドがあるなら deadlock を報告する
ことはありません。

-- 
Yusuke Endoh <mame / tsg.ne.jp>
----------------------------------------
http://redmine.ruby-lang.org/issues/show/3251

----------------------------------------
http://redmine.ruby-lang.org