6.9 条件变量的使用及注意事项

news/2024/12/4 20:19:27/

目录

条件变量

使用步骤:

初始化:

生产资源线程:

开始产生资源

消费者线程:


条件变量

应用场景:生产者消费者问题,是线程同步的一种手段。
必要性:为了实现等待某个资源,让线程休眠。提高运行效率

int pthread_cond_wait(pthread_cond_t *restrict cond,
           pthread_mutex_t *restrict mutex);

int pthread_cond_timedwait(pthread_cond_t *restrict cond,
           pthread_mutex_t *restrict mutex,
           const struct timespec *restrict abstime);

int pthread_cond_signal(pthread_cond_t *cond);
int pthread_cond_broadcast(pthread_cond_t *cond);

使用步骤:

初始化:

静态初始化
pthread_cond_t   cond = PTHREAD_COND_INITIALIZER;      //初始化条件变量
pthread_mutex_t  mutex = PTHREAD_MUTEX_INITIALIZER;  //初始化互斥量
或使用动态初始化
pthread_cond_init(&cond);

生产资源线程:

pthread_mutex_lock(&mutex);

开始产生资源

pthread_cond_sigal(&cond);    //通知一个消费线程
或者
pthread_cond_broadcast(&cond); //广播通知多个消费线程
pthread_mutex_unlock(&mutex);

消费者线程:

pthread_mutex_lock(&mutex);
while (如果没有资源){   //防止惊群效应
pthread_cond_wait(&cond, &mutex); 
}
有资源了,消费资源
pthread_mutex_unlock(&mutex);  

注意:
1 pthread_cond_wait(&cond, &mutex),在没有资源等待是是先unlock 休眠,等资源到了,再lock
所以pthread_cond_wait he pthread_mutex_lock 必须配对使用。

2  如果pthread_cond_signal或者pthread_cond_broadcast 早于 pthread_cond_wait ,则有可能会丢失信号。 
3 pthead_cond_broadcast 信号会被多个线程收到,这叫线程的惊群效应。所以需要加上判断条件while循环。


http://www.ppmy.cn/news/292885.html

相关文章

Vue.js 中的 v-for 中的 key 属性

Vue.js 中的 v-for 中的 key 属性 Vue.js 是一个流行的 JavaScript 前端框架,它提供了一种简单的方式来构建可复用的组件和应用程序。在 Vue.js 中,v-for 指令用于循环渲染一个数组或对象,并将每个元素渲染为一个 DOM 元素。在使用 v-for 指…

【无标题】2024年、2025年毕业五年制专转本辅导班招生简章

2024年、2025年毕业五年制专转本辅导班招生简章 要不要上课外班?选择什么样的课外班?如何选择一个合适的课外班?一个最为基本的思考立足点是课外班应该满足你孩子的需求。 这里面有两个意思,一个是不要因为别人孩子上课外班&…

【算法与数据结构】206、LeetCode 反转链表

文章目录 一、题目二、翻转链表双指针法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、翻转链表双指针法 思路分析:代码首先进行头结点合法性判断,如果是空链表或者仅有一个节点的链…

.msi文件安装报错

.msi文件安装报错一般是因为安装权限不够,但右键.msi文件没有以管理员权限运行,所以需要用命令提示符来操作。 打开命令提示符管理员——H:\工具软件\iplat>msiexec /package "OPC Core Components 2.00 SDK 2.20.msi" 命令格式为msiexec /…

windows11安装msi文件的方法

windows11安装msi文件的方法 一.开启Windows Installer服务 1.windowsR,输入services.msc 2.启动Windows Installer 二.安装msi 1.以管理员身份运行命令提示符 2.类比以下命令安装msi

msi和exe安装文件有什么区别

在Windows上安装软件的时候,一般有两种方式: Windows安装包(.msi)Windows二进制文件(.exe) 这两种安装方式的区别如下: .exe是一个安装引导程序。它是安装工程通过MSBuild创建的,…

win系统如何运行msi后缀文件

win系统如果运行msi后缀文件 1、用管理员运行命令行:输入:msiexec /package 文件路径及名称 案例:msiexec /package d:/program-zip.msi

MSI和MSI-X区别

MSI(Message Signaled Interrupts)是一种通过在内存中写入信息来产生中断的方式,其中内存地址由设备驱动程序和硬件设备协商确定。MSI与传统的中断线不同,它不需要单独的中断线,而是通过PCI总线进行通信。 MSI-X(Extended Message Signaled I…