Condition Variables 条件变量


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!

猜你喜欢

转载自blog.csdn.net/qq_38255689/article/details/78591705