条件变量一般而言,会有一个布尔表达式作为唤醒的条件调用wait的线程需要读取这个布尔表达式内数据,

同样,调用signal的线程需要修改这个布尔表达式的数据,让表达式为真。故而这两个线程必然访问至少一个公共变量

于是需要mutex来保护这个公共变量。这也就解释了为何条件变量与mutex共存的原因。

那么为什么要传入呢?

条件变量内部会先解锁mutex,然后堵塞。当被唤醒后再次争夺mutex锁上

原因在于,如若不传入就无法解锁,无法解锁Mutex就没有其他线程能进入临界区去修改布尔表达式中的公共变量。

所以传入并且解锁是必然的。

唤醒后为何要再次加锁?

第一 : 锁的lock与unlock应该在同一函数内成对出现。

第二 : 存在着条件变量被唤醒后,其他数据也需要被纳入临界区的需求。

于是条件变量把一个临界区至少划分为两个临界区(因为虚假唤醒的原因,故而可能存在多于2个临界区),中间以睡眠间隔。

最新文章

  1. Apache Shiro系列(1)
  2. linux配置网卡绑定
  3. [BZOJ2656][codevs1207][Zjoi2012]数列(sequence)
  4. qt搭建环境
  5. webservice发布在外网上的在system.web中加入这个就好使了
  6. Stream,Reader/Writer,Buffered的区别(1)
  7. JS生成指定长度的随机数
  8. 【C#学习笔记】退出程序
  9. javascript一些有用但又不常用的特性
  10. 有关js的变量、作用域和内存问题
  11. Android提高21篇之二:SurfaceView的基本使用方法
  12. BZOJ1782: [Usaco2010 Feb]slowdown 慢慢游
  13. mysql 5.7占用400M内存优化方案
  14. uestc Palindromic String
  15. js 动态生成背景图 GeoPattern
  16. python3.*的一些笔记
  17. 移动端ios下H5的:active样式失效的解决方法
  18. Scrum Meeting 6
  19. php递归获取目录下所有文件
  20. MariaDBConn用于链接MariaDB的管理类

热门文章

  1. CSS的SVG学习
  2. 第一个android App, hello world
  3. 扩展gRPC支持consul服务发现和Polly策略
  4. Natas1 Writeup(查看页面源码)
  5. MySQL 【进阶查询】
  6. koa2框架介绍
  7. servlet本质是什么
  8. P5021 赛道修建 题解
  9. mybatis类型转换器 - 自定义全局转换enum
  10. 面试刷题24:介绍一枚 JAVA妹妹?