前言 大家好吖,欢迎来到 YY 滴Linux系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁 主要内容含:

pthread_mutex_lock(&mutex);
while (条件为假)
{
pthread_cond_wait(cond, mutex);
}
...代码部分
pthread_mutex_unlock(&mutex);pthread_mutex_lock(&mutex);
...代码部分改动共享资源,条件变为真
pthread_cond_signal(cond);//给条件发送信号代码
pthread_mutex_unlock(&mutex);


我们拿线程1入队列过程举例:
//_c_cond消费者consumer的条件变量
//_p_cond生产者productor的条件变量
//_q是阻塞队列
void Push(const T &in)//生产者productor
{
pthread_mutex_lock(&_mutex);
if(IsFull())//判断是否满,满了进入阻塞等待
{
//自己,阻塞等待
pthread_cond_wait(&_p_cond,&_mutex);
}
_q.push(in);//生产
//生产了,另一个线程条件变量不符合了,唤醒另一个线程的条件变量阻塞等待
pthread_cond_signal(&_c_cond);
pthread_mutex_unlock(&_mutex);
}
void Pop(T *out)//消费者consumer
{
pthread_mutex_lock(&_mutex);
if(IsEmpty())//判断是否空,空了进入阻塞等待
{
//自己,阻塞等待
pthread_cond_wait(&_c_cond,&_mutex);//伪唤醒状态
}
*out=_q.front();
_q.pop();//消费
//消费了,另一个线程条件变量不符合了,唤醒另一个线程的条件变量阻塞等待
pthread_cond_signal(&_p_cond);
pthread_mutex_unlock(&_mutex);
}#include <stdio.h>
#include <pthread.h> 初始化条件变量有两种方法:静态初始化和动态初始化
pthread_cond_destroy函数进行销毁pthread_cond_t cond_d = PTHREAD_COND_INITIALIZER;pthread_cond_destroy函数进行销毁pthread_cond_t cond;
int pthread_cond_init(pthread_cond_t *restrict cond,const pthread_condattr_t *restrict attr);
参数:
cond:要初始化的条件变量
attr:条件变量使用的属性对象,通常传递NULL表示使用默认属性。pthread_cond_destroy函数进行销毁int pthread_cond_destroy(pthread_cond_t *cond);
返回值: int ret = pthread_cond_destroy(&cond_d);
if (ret != 0) {
fprintf(stderr, "Failed to destroy condition variable: %s\n", strerror(ret));
exit(EXIT_FAILURE);
}int pthread_cond_wait(pthread_cond_t *restrict cond,pthread_mutex_t *restrict mutex);
参数:
cond:要在这个条件变量上等待
mutex:互斥量int pthread_cond_broadcast(pthread_cond_t *cond);
int pthread_cond_signal(pthread_cond_t *cond);