关于posix 条件变量pthread_cond_t 中 pthrcad_cond_wait 的说明


#include <pthread.h>

pthread_cond_t cond;
pthread_mutex_t mutex_m;
bool flag = false;

void fun(){
    pthread_mutex_lock(&mutex_m);
    while(flag == false){
        pthread_cond_wait(&cond, &mutex_m); 
    }
    printf("%s\n","hello");    //业务代码
    pthread_mutex_unlock(&mutex_m);
}
void changeFlag(){
    pthread_mutex_lock(&mutex_m);
    flag = true;
    pthread_mutex_unlock(&mutex_m);
    pthread_cond_signal(&cond);
}
int main(){
    //初始化cond,mutex
    pthread_mutex_init(&mutex_m,NULL);
    pthread_cond_init(&cond,NULL);
    changeFlag();
    fun();
   fun();
return 0; }

 

在调用pthrcad_cond_wait前,需先对互斥锁mutex加锁。Pthrcad_cond_wait函数执行时.首先把调用pthrcad_cond_wait的线程放入条件变量的等待队列中,然后将互斥锁mutex解锁。可见,从pthrcad_cond_wait开始执行到其调用线程被放入条件变量的等待队列之间的这段时间内,pthread_cond_signal和pthread_cond_broadcast等函数不会修改条件变量.换言之,pthrcad_cond_wait两数不会错过目标条件变量的任何变化。

当pthrcad_cond_wait调用完成返回时,互斥锁mutex会再次被锁上。所以,需要在调用完pthrcad_cond_wait之后,对互斥锁mutex解锁。

posted @ 2021-02-08 15:22  zeroPatrick  阅读(75)  评论(0)    收藏  举报