博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux线程同步(4): 条件变量
阅读量:4311 次
发布时间:2019-06-06

本文共 1254 字,大约阅读时间需要 4 分钟。

转自: 

条件变量分为两部分: 条件和变量. 条件本身是由互斥量保护的. 线程在改变条件状态前先要锁住互斥量. 

1. 初始化:

    条件变量采用的数据类型是pthread_cond_t, 在使用之前必须要进行初始化, 这包括两种方式:

  • 静态: 可以把常量PTHREAD_COND_INITIALIZER给静态分配的条件变量.
  • 动态: pthread_cond_init函数, 是释放动态条件变量的内存空间之前, 要用pthread_cond_destroy对其进行清理.
None.gif #include  < pthread.h >
None.gif
None.gif int  pthread_cond_init(pthread_cond_t  * restrict cond, pthread_condattr_t  * restrict attr);
None.gif int  pthread_cond_destroy(pthread_cond_t  * cond);
None.gif
None.gif成功则返回0, 出错则返回错误编号.

    当pthread_cond_init的attr参数为NULL时, 会创建一个默认属性的条件变量; 非默认情况以后讨论.

2. 等待条件:

None.gif #include  < pthread.h >
None.gif
None.gif int  pthread_cond_wait(pthread_cond_t  * restrict cond, pthread_mutex_t  * restric mutex);
None.gif int  pthread_cond_timedwait(pthread_cond_t  * restrict cond, pthread_mutex_t  * restrict mutex,  const   struct  timespec  * restrict timeout);
None.gif
None.gif成功则返回0, 出错则返回错误编号.

    这两个函数分别是阻塞等待和超时等待.

    等待条件函数等待条件变为真, 传递给pthread_cond_wait的互斥量对条件进行保护, 调用者把锁住的互斥量传递给函数. 函数把调用线程放到等待条件的线程列表上, 然后对互斥量解锁, 这两个操作是原子的. 这样便关闭了条件检查和线程进入休眠状态等待条件改变这两个操作之间的时间通道, 这样线程就不会错过条件的任何变化.

    当pthread_cond_wait返回时, 互斥量再次被锁住.

3. 通知条件:

None.gif #include  < pthread.h >
None.gif
None.gif int  pthread_cond_signal(pthread_cond_t  * cond);
None.gif int  pthread_cond_broadcast(pthread_cond_t  * cond);
None.gif
None.gif成功则返回0, 出错则返回错误编号.

    这两个函数用于通知线程条件已经满足. 调用这两个函数, 也称向线程或条件发送信号. 必须注意, 一定要在改变条件状态以后再给线程发送信号.

转载于:https://www.cnblogs.com/hnrainll/archive/2011/05/01/2034016.html

你可能感兴趣的文章
外国的月亮比较圆吗?外籍团队工作有感
查看>>
CentOS 关闭烦人的屏保
查看>>
分布式系统事务一致性解决方案
查看>>
ShuffleNet总结
查看>>
前后台验证字符串长度
查看>>
《算法导论 - 思考题》7-1 Hoare划分的正确性
查看>>
UVa 10491 奶牛和轿车(全概率公式)
查看>>
[Hadoop]-HDFS-架构篇
查看>>
Metronic-最优秀的基于Bootstrap的响应式网站模版
查看>>
20. Valid Parentheses
查看>>
IOS 简单的动画自定义方法(旋转、移动、闪烁等)
查看>>
js/jquery 实时监听输入框值变化的完美方案:oninput & onpropertychange
查看>>
axios
查看>>
PostgreSQL导出一张表到MySQL
查看>>
MVC 前台向后台传输数据
查看>>
《少年先疯队》第四次作业:项目需求调研与分析
查看>>
IPv6 Scapy Samples
查看>>
Asp.Net Ajax的两种基本开发模式
查看>>
哈希——并查集结构——岛问题
查看>>
正则表达式
查看>>