void *decrement(void *arg) {
while (1) {
pthread_mutex_lock(&mutex); //加锁
while (count <= 0) {
printf("count<=0,thread1 is hanging!\n");
pthread_cond_wait(&cond, &mutex); // 解锁,等信号,加锁
sleep(1);
printf("sleep!\n");
}
count = count - 1;
pthread_mutex_unlock(&mutex); //解锁
}
}
- 获得互斥锁(1),然后解锁(2),然后等待信号(3),等到信号之后加锁(4),然后进入临界区(5),然后解锁(6)
- 会有多个消费者在等待这个信号,会有惊群现象吗?
- 如果把 1,2 步骤去掉,貌似也是可行的