senda> 確認です。 senda> これってsignalしたあとthreadはおこすけれど、そのまま自分も走ってしかも senda> mutexそのものは開放していないので Signal-Continueになってますよね? senda> あ、前田さんの元々のコードからSignal-Continueですね。 何かそうでなかったような勘違いをしていました。ちょっと恥ずかしい。 ConditionVariableの導入は同期をとることで不要なThreadのコンテキストスイッ チを減らすのが第一の目的なので元々のコードでも本に書いてあることが本当なら Signal-Continue実装でこの目的(コンテキストスイッチを減らす)はクリアしてい ることになります。 def pop(noblock = false) @que_cond.synchronize { if noblock and @que.length == 0 raise ThreadError, "queue empty" end while @que.empty? # <------- (a) @que_cond.wait end return @que.shift } end うえの(a)のように待っている条件が本当に満たされているかチェックする書き方 が普通だとすると senda> そのかわり(1)条件が変ってしまうかも知れない (2)Threadの実行順序が予 senda> 測困難になる という問題が出てきます。 という問題に目をつぶってもOKという気がしてきました。 S.Senda