pthread_cond_wait(pthread_cond_t *, pthread_mutex *)
等待一个条件变量,并且释放传入的mutex锁
标准的用法就是
pthread_mutex_lock(&mutex);
while(xxx)
pthread_cond_wait(&cond, &mutex);
pthread_mutex_unlock(&mutex);
其中phread_cond_wait可以展开成
pthread_mutex_unlock(mutex);
pthread_cond_just_wait(cond);
pthread_mutex_lock(mutex);
也就是在wait之前放锁,收到信号之后再加锁
上图运行结果为
Thread1 go ahead!
Thread2 go ahead!
说明signal传给了两个wait
若将pthread_cond_wait后面的unlock去掉,则可以预见的是,尽管signal传递给两个wait,一旦他们被唤醒后,第一个操作就是请求mutex锁,因此只有一个thread可以拿到锁并继续运行,然后退出,另外一个进程即使被唤醒也拿不到锁。
运行结果
Thread1 go ahead!
当然也可能是Thread2 go ahead!