目录

条件变量

使用步骤:

初始化:

生产资源线程:

开始产生资源

消费者线程:


条件变量

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

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循环。

6.9 条件变量的使用及注意事项相关推荐

  1. C++11下条件变量之虚假唤醒

    概述: 条件变量(condition variable)是利用共享的变量进行线程之间同步的一种机制.典型的场景包括生产者-消费者模型,线程池实现等. 对条件变量的使用包括两个动作: 在线程开发的过程中 ...

  2. 信号量,互斥锁,条件变量的联系与区别

    转自:http://blog.chinaunix.net/u3/108685/showart_2127853.html 信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程, ...

  3. linux互斥锁和条件变量,如何理解互斥锁和条件变量?

    下面的代码出自<Unix/Linux编程实践教程>,作用是用两个线程分别统计两个文件的单词的数目,并在主线程中计算总数.下面是运行截图: 但是看了半天还是难以理解下面代码中的加锁.解锁以及 ...

  4. 【C++】多线程互斥锁、条件变量

    我们了解互斥量和条件变量之前,我们先来看一下为什么要有互斥量和条件变量这两个东西,了解为什么有这两东西之后,理解起来后面的东西就简单很多了!!! 先来看下面这段简单的代码: int g_num = 0 ...

  5. Linux多线程同步------条件变量

    先来看下<Linux高性能服务器编程>中对条件变量的描述: 上述话可以总结为: 多线程中某一个线程依赖于另外一个线程对共享数据的改变时,就可以使用条件变量! 用消费者生产者的来理解条件变量 ...

  6. C++ 多线程:条件变量 std::condition_variable

    文章目录 描述 使用 描述 头文件<condition_variable> 定义 class condition_variable; 简介 之前我们也已经介绍过了C++多线程中互斥变量存在 ...

  7. 【C++】多线程与条件变量【三】

    文章目录 1 条件变量是什么? 实例1: 2 条件变量本质? 3 引入条件变量的原因? 实例2: 实例3: 实例4: 4 如何使用条件变量? 4.1 std::condition_variable 实 ...

  8. Linux下多线程编程互斥锁和条件变量的简单使用

    Linux下的多线程遵循POSIX线程接口,称为pthread.编写Linux下的多线程程序,需要使用头文件pthread.h,链接时需要使用库libpthread.a.线程是进程的一个实体,是CPU ...

  9. C++条件变量使用详解

    1. condition_variable介绍 在C++11中,我们可以使用条件变量(condition_variable)实现多个线程间的同步操作:当条件不满足时,相关线程被一直阻塞,直到某种条件出 ...

最新文章

  1. Matlab数据的可视化 -- 极坐标图及其与直角坐标图的转换
  2. python把矩阵存为文件_python 读取文件并把矩阵转成numpy的两种方法
  3. 设计模式:设计模式七大原则之迪米特法则
  4. SpendidCRM:在admin-layout中修改了视图上的字段后,用MyGeneration生成修改脚本
  5. Dubbo-go 源码笔记(一)Server 端开启服务过程
  6. java关键字与标识符 —(3)
  7. hive与依赖环境的交互
  8. 优酷下载的视频保存在哪里
  9. virus.win32.xorer病毒
  10. 3.6. Pure-FTPd + LDAP + MySQL + PGSQL + Virtual-Users + Quota
  11. 分布式和微服务区别_分布式、集群、微服务到底有啥区别?
  12. 中国最惨创业者的惨痛教训!
  13. 一款支持vue3 的颜色选择器
  14. OpenCV调用工业相机
  15. 鸿雪因缘--穿越千年的朋友圈
  16. 2、51单片机——I2C 总线
  17. Day 20 IOl流
  18. 今日学习在线编程题:弓形半径
  19. Android Service startForeground不显示Notification的办法
  20. 台式计算机和笔记本,大一买买笔记本还是台式电脑好?

热门文章

  1. 嵌入式Linux下彩色LCD驱动的设计与实现
  2. 数据结构在游戏中的简单应用
  3. php debug 打印变量_打印变量到页面上的方法 PHP debug函数
  4. 空间后方交会c++程序和matlab(可直接运行)
  5. 关于内存和内存地址的详解
  6. cf551-brother_acm训练题解
  7. php soapclient xml,PHP SoapClient请求
  8. 高德地图通过基站信息获取经纬度和具体位置
  9. 2022重构版Xiuer抖你妹套图WordPress主题源码
  10. java removeattribute_springboot使用shiro后HttpSession的removeAttribute无效