条件变量
条件变量用于自动阻塞线程,直到某个特定事件发生或某个条件满足为止,通常情况下,条件变量是和互斥锁一起搭配使用的。使用条件变量主要包括两个动作:
- 一个线程等待某个条件满足而被阻塞;
- 另一个线程中,条件满足时发出“信号”。
条件变量通常搭配互斥锁来使用,是因为条件的检测是在互斥锁的保护下进行的,也就是说条件本身是由互斥锁保护的,线程在改变条件状态之前必须首先锁住互斥锁,不然就可能引发线程不安全的问题。
初始化和销毁条件变量
#include < pthread.h >
int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr);
int pthread_cond_destroy(pthread_cond_t *cond);
条件变量的主要操作是发送信号(signal)和等待。发送信号操作即是通知一个或多个处于等待状态的线程,某个共享变量的状态已经改变,这些处于等待状态的线程收到通知之后便会被唤醒,唤醒之后再检查条件是否满足。等待操作是指在收到一个通知前一直处于阻塞状态。
函数 pthread_cond_signal()和 pthread_cond_broadcast()均可向指定的条件变量发送信号,通知一个或多个处于等待状态的线程。调用 pthread_cond_wait()函数是线程阻塞,直到收到条件变量的通知。
通知条件变量
#include < pthread.h >
int pthread_cond_broadcast(pthread_cond_t *cond);
int pthread_cond_signal(pthread_cond_t *cond);
pthread_cond_signal()函数至少能唤醒一个线程,而 pthread_cond_broadcast()函数则能唤醒所有线程。
等待条件变量
#include < pthread.h >
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
Linux
+关注
关注
88文章
11822浏览量
219602 -
变量
+关注
关注
0文章
616浏览量
29573 -
线程
+关注
关注
0文章
510浏览量
20875
发布评论请先 登录
相关推荐
热点推荐
Linux下线程间通讯---读写锁和条件变量
读写锁,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。件变量是线程可用的一种同步机制,条件变量给多个
Linux多线程及线程间同步
pthread_mutex_lock先加锁,操作完之后pthread_mutex_unlock再解锁。5、线程间同步条件变量:使用条件变量可
发表于 12-08 14:14
linux多线程机制-线程同步
线程间的同步 同步就是线程等待某一个事件的发生,当等待的事件发生时,被等待的线程和事件一起继续执行。如果等待的事件未到达则挂起。在linux操作系统中是通过
发表于 04-02 14:42
•803次阅读
Linux多线程编程的高效开发
,就是可以让 Windows 和 Linux 下让锁的表现统一。 条件变量的置位和复位有两种常用模型:第一种模型是当条件变量置位(signa
发表于 04-02 14:45
•571次阅读
Linux多线程与同步
典型的UNIX系统都支持一个进程创建多个线程(thread)。在Linux进程基础中提到,Linux以进程为单位组织操作,Linux中的
发表于 04-02 14:47
•688次阅读
linux内核中percpu变量的实现
不会相互影响,所以也就不会有各种多线程问题。 正确的使用thread local变量,能极大的简化多线程开发。所以不管是c/c++/rust,还是java/c#等,都内置了对thread local
互斥锁及条件变量的使用
本文主要分为三个部分: 第一部分简要介绍线程的概念及其使用 第二部分主要介绍互斥锁及条件变量的使用(重点探讨pthread_cond_wait) 第三部分参考运行IBM的多线程工作代码
Linux线程条件变量是什么意思
评论