• std::mutex::lock()
    呼び出したスレッドが所有権を取得できるまでブロックする。
  • pthread_cond_wait(cond, mutex)
    • cond がシグナルされてない ⇒ mutex を開放した上でスレッドスリープする。シグナルされたら再度ロックを取る。そしてロックが取れたら関数を抜ける。
    • 本関数でスリープしていても pthread の仕様により spurious wakeup が発生する。
    • なので、producer スレッドが弄る値のチェックをした上で pthread_cond_wait() する必要がある。

memo

  • 起きている問題: pthread_cond_wait(cond, mutex) から帰ってこない
    • 原因
      • 1. そもそも cond がシグナルされていない
      • 2. cond がシグナルされたけどロックが取れない
    • 調べる
        • Q. 誰がどういうロジックでシグナルするのか?