前田です。

In message "[ruby-dev:1544] Re: Mutex#unlock"
石塚圭樹 <keiju / rational.com> wrote:

|>|のようにロックを待っているスレッドを全部起こしていますよね?
|>|全部のスレッドを起こしてもロックを獲得できなかったスレッドは
|>|どうせまた寝ることになるので、
|
|>|でもよいような気がするのですが、これでは問題があるのでしょうか。
|>
|>いや,参考にしたCMLのスレッドライブラリがこうなっていたとい
|>う以上の意味はないです.正直言うと本当に問題があるのかないの
|>か判定する能力に自信がないです.
|
|1つだけ起こすとなると, 必ず最初に待ちになったスレッドだけが起きること
|になりますよね? そうじゃなくて, 待ちになっているどのスレッドでも起きる
|可能性があるようにしたかったんじゃないですかね?|

でもそれだけなら全部のスレッドを起こさなくても、ランダムに一つ選んで
そのスレッドだけ起こせばよいですよね。
あと、キューに入った順番に起こすことにすると、永久にロックの順番が
回ってこない、という可能性がなくなるというメリットもあると思います。

どのスレッドがロックを獲得するかわからない、と想定したコードは
キューに入った順番にロックを獲得する、という仕様にしてもきちんと
動くと思うので問題ないかと思ったんですが...。

-- 
前田 修吾