linux条件变量若干问题
来源:互联网 发布:淘宝订单p图教程 编辑:程序博客网 时间:2024/06/01 19:04
先介绍一下pthread_cond_wait()函数的调用过程,wait函数首先对互斥对象进行解锁,然后等待条件的发生,即等待pthread_cond_signal()或pthread_cond_broadcast()函数的调用,然后wait函数返回,返回时对互斥对象进行加锁。
那么在调用pthread_cond_wait()函数之前为什么要对条件变量进行加锁呢?
原因很简单,如果条件不成立我们就进入阻塞,在进入阻塞这个期间,如果条件变量改变了的话,那我们就漏掉了这个条件(from APUE)。这句话不是很好理解,假如我们有thread1,thread2对全局共享变量num++,当num的值为100时,唤醒thread3,当thread3进入阻塞期间时,num值为100,此时thread1或thread2向条件变量发送信号,但是由于thread3并没有真正的进入阻塞,而是处于进入阻塞这个状态。结果,thread3便遗漏了这个条件。因此,在使用条件变量时,一定要让pthread_cond_wait()完成阻塞,所以我们要首先用互斥对象锁住条件变量,让其他线程无法使用条件变量。
还有一个问题,在使用条件变量时,为什么在让pthread_cond_wait()在while循环内,用if不可以么?
答案是不可以的,具体原因在于等待线程可能会别莫名奇妙的其他信号唤醒,因此在每次被唤醒时,我们都要检查唤醒的条件。
0 0
- linux条件变量若干问题
- Linux 下条件变量
- linux 条件变量
- linux条件变量用法
- Linux 条件变量 pthread_cond_wait
- linux 条件变量
- linux同步-条件变量
- Linux 条件变量
- Linux 条件变量 pthread_cond_wait
- linux 多线程-条件变量
- Linux 条件变量 pthread_cond_wait
- 理解 Linux 条件变量
- linux条件变量
- linux 线程 条件变量
- 理解 Linux 条件变量
- linux 条件变量--同步
- linux条件变量
- Linux _条件变量
- TRIZ理论的进化法则分析(TRIZ学习笔记)
- 数据统计(fopen版)
- lua的string库与强大的模式匹配
- Linux文件系统的实现
- 排序算法(四)-- 快速排序
- linux条件变量若干问题
- 远程备份脚本
- Flash+js幻灯片超炫的效果,值得一看
- epoll与select
- 字符串函数---strstr()、memchr()、strchr()详解及实现
- rotate旋转分析(编程珠玑第二章)
- 数据结构与算法分析 - 快速排序
- XHTML中按钮添加超链接以及使插入图片与屏幕一样大
- nyoj 1077 小博弈 【另类巴什博奕】