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