为什么条件变量需要传入mutex?
2024-09-01 12:52:25
条件变量一般而言,会有一个布尔表达式作为唤醒的条件。调用wait的线程需要读取这个布尔表达式内数据,
同样,调用signal的线程需要修改这个布尔表达式的数据,让表达式为真。故而这两个线程必然访问至少一个公共变量。
于是需要mutex来保护这个公共变量。这也就解释了为何条件变量与mutex共存的原因。
那么为什么要传入呢?
条件变量内部会先解锁mutex,然后堵塞。当被唤醒后再次争夺mutex锁上。
原因在于,如若不传入就无法解锁,无法解锁Mutex就没有其他线程能进入临界区去修改布尔表达式中的公共变量。
所以传入并且解锁是必然的。
唤醒后为何要再次加锁?
第一 : 锁的lock与unlock应该在同一函数内成对出现。
第二 : 存在着条件变量被唤醒后,其他数据也需要被纳入临界区的需求。
于是条件变量把一个临界区至少划分为两个临界区(因为虚假唤醒的原因,故而可能存在多于2个临界区),中间以睡眠间隔。
最新文章
- Apache Shiro系列(1)
- linux配置网卡绑定
- [BZOJ2656][codevs1207][Zjoi2012]数列(sequence)
- qt搭建环境
- webservice发布在外网上的在system.web中加入这个就好使了
- Stream,Reader/Writer,Buffered的区别(1)
- JS生成指定长度的随机数
- 【C#学习笔记】退出程序
- javascript一些有用但又不常用的特性
- 有关js的变量、作用域和内存问题
- Android提高21篇之二:SurfaceView的基本使用方法
- BZOJ1782: [Usaco2010 Feb]slowdown 慢慢游
- mysql 5.7占用400M内存优化方案
- uestc Palindromic String
- js 动态生成背景图 GeoPattern
- python3.*的一些笔记
- 移动端ios下H5的:active样式失效的解决方法
- Scrum Meeting 6
- php递归获取目录下所有文件
- MariaDBConn用于链接MariaDB的管理类