>>786
インデントつけました

void loop() {
  lock()
  while (true) {
    cond_wait(!empty() or !running)
    if (!running) {
      break
    }
    pop()
  }
}

cond_waitの前にrunningみなくて大丈夫ですかね?
startの直後loopが始まる直前でstopが呼ばれた場合cond_waitって起きます?