前田です。

In message "[ruby-list:6806] Re: Mutex/ConditionVariable/Queue"
Kazuhisa YANAGAWA <katze / yuba.is.uec.ac.jp> wrote:

|  それにしても inheritance anomaly の見本みたいなコードになってしまい
|  ますね. やっぱり同期に関するコードは本来のメソッドコードに埋め込むべ
|  きではない.
|
|  # でないと同期コードの分だけそっくり継承先で再定義しなくてはならなく
|  # なる....というのが inheritance anomaly.

いや、synchronizeをネストできるようにすれば新しく追加するのは条件変数
だけでよいはずです。

|> Mutexも二つあるのはネストができないせいです。
|
|  ....してるじゃないですか. 一つのスレッドの中で二つの 
|  Mutex#synchronize が呼ばれてると思いますが.

大丈夫なのは別々のMutexになっているからです。

mutex.synchronize {
  mutex.synchronize {
  }
}

とするとデッドロックします。
カウンタを付けるだけでネストできるようになるんですけど、
普通Mutexはネストできないものらしいので、そのままにして
いました。
Mutexをモジュールに書き直そうと思うので、そっちではネスト
できるようにしようと思います。

-- 
前田 修吾