void produce(Object obj); Object consume();
void produce() { printf("("); } void consume() { printf(")"); }
((())())(((
(((())))
(()))
mutex_lock(); while (!cond) { // cond 可以是任意的计算 cond_wait(&cv, ); } assert(cond); // 此时 cond 成立且持有锁 lk mutex_unlock();
// 注意锁的使用 mutex_lock(); cond = true; cond_broadcast(&cv); // 唤醒所有可能继续的线程 mutex_unlock();
void produce() { mutex_lock(); while (!(depth < n)) { cond_wait(&cv, ); } assert(depth < n); depth++; printf("("); // put object to queue cond_broadcast(&cv); mutex_unlock(); }
void produce() { mutex_lock(); while (!(depth < n)) { cond_wait(&cv, ); } assert(depth < n); depth++; printf("("); // put object to queue cond_signal(&cv); // mutex_unlock(); }
<
>
_
<><_
><>_