前田です。 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をモジュールに書き直そうと思うので、そっちではネスト できるようにしようと思います。 -- 前田 修吾