前言
pthread_cond_wait函数是Linux下条件变量的函数之一,这个函数也是其中最为复杂的一个函数,其功能为:只要到这个函数,就发生阻塞,直到使用pthread_cond_signal或者pthread_cond_broadcast给条件变量发送信号,此时该线程才继续运行,其主要用三个功能:
-
阻塞等待条件变量cond
-
释放已掌握的互斥锁(解锁互斥量)相当于ptherad_mutex_unlock(&mutex);
1、2两步为一个原子操作
-
当被唤醒,pthread_cond_wait函数返回时,解除阻塞并重新申请获取互斥锁pthread_mutex_lock(&mutex);
总结一下,运行到这里就会发生阻塞与此同时开始放锁,这个两个是原子操作,同时发生。有信号发过来,函数执行完毕,重新加锁。下面结合代码讲解一下,参考自https://www.cnblogs.com/god-of-death/p/11452308.html.:
代码示例
#include<stdio.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>
pthread_t tid[3];
int sum = 0;
pthread_mutex_t sumlock = PTHREAD_MUTEX_INITIALIZER; /* 静态初始化互斥量 */
pthread_cond_t cond_sum_ready = PTHREAD_COND_INITIALIZER; /* 静态初始化条件变量 */