Mutex#locked? はいらない子?の続き

ref: http://d.hatena.ne.jp/ku-ma-me/20080111/p1

shinh さんや kikx さんに指摘されました (kikx さんからはチャットで) が、アサーションで使えますね。「関数 foo が呼ばれるときは mutex がロックされている」という性質を保証したいとき、以下のようにチェックを書くとか。

def foo
  raise unless mutex.locked?
  # ...
end

菊さんの意見では、「ロックされているかどうか」を返す mutex.locked? より、「このスレッドがロックしているかどうか」を返す Mutex.own? の方がいいとのこと。確かに。1.8 では Mutex に所有者という概念がない (つまり他人がロックした Mutex でもアンロックできる!) のでダメそうですけど、1.9 なら良さそうです。

デバッグとかプロファイリングとかアサーションとかに使えるなら、いらない子ではなさそうですね。ただ、プログラムの本筋で使うべきではないなら、マニュアルあたりで注意を促したほうがいい気もする、かなぁ。


全然関係ないですけど、pthread の初期の Linux 実装である LinuxThread の作者は Xavier Leroy (OCaml の主開発者) なんですね。pthread 関係の Manpage に名前が載っていて驚きました。