互斥锁与条件变量
来源:互联网 发布:linux vi 行号 编辑:程序博客网 时间:2024/05/02 02:26
最近复习汤小丹的《计算机操作系统》(西安电子科技大学出版社,第三版)进程、线程同步章节时,发现一个疑问。
在讲进程同步时,提到了两类方法:信号量机制和管程机制。信号量机制又包括四种:①整型信号量;②记录型信号量;③AND型信号量;④信号量集。如果采用整型信号量或记录型信号量,则在共享多个资源时,可能出现进程死锁的情况,因此才引入了AND型信号量。进程死锁情况如下图:
在讲线程同步和通信时,提到了三类方法:互斥锁、条件变量和信号量。而且提到只用互斥锁mutex会引起死锁,因而引入了条件变量。但是没有想明白,如果只用mutex实现线程互斥,会出现上图所示的线程死锁的情况的话,引入条件变量就能够解决了吗?答案是不能。通过查看《POSIX多线程程序设计》才明白,此处的指的线程死锁的情况,不是上述的共享多个临界资源的场景,而是共享一个临界资源出现死锁的场景。摘录的描述如下:当一个线程互斥的访问共享状态时,它可能发现在其他线程改变状态之前它什么也做不了。状态可能是对的和一致的,即没有破坏变量,但是线程就是对当前状态不感兴趣。例如,一个处理队列的线程发现队列为空时,它只能等待,直到有一个节点被添加进队列中。例如,共享数据由一个互斥量保护。线程必须锁住互斥量来判定队列的当前状态,如判定队列是否为空。线程在等待之前必须释放锁(否则其他线程就不可能插入数据),然后等待队列状态的变化。例如,线程可以通过某种方式阻塞自己,以便插入线程能够找到它的ID并唤醒它。但这里有一个问题,即线程是运行于解锁和阻塞之间。因此解锁和阻塞操作必须是原子性的。
参考:
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=3642401
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=3642403
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1956753
- 条件变量与互斥锁
- 互斥锁与条件变量
- 互斥锁与条件变量
- 条件变量与互斥锁
- 互斥锁与条件变量
- 互斥锁与条件变量
- 条件变量与互斥锁
- 互斥锁与条件变量
- linux 条件变量与互斥锁
- 互斥锁与条件变量应用
- 条件变量与互斥锁解析
- linux 多线程编程 互斥锁与条件变量
- 互斥锁与条件变量配合使用
- 互斥锁与条件变量的通俗语义
- 同步(一)互斥锁与条件变量
- 条件变量与互斥锁、信号量的区别
- Linux多线程 互斥锁与条件变量使用
- 线程控制--互斥锁与条件变量
- eclipse生成Hibernate映射文件
- 我们应该读哪些书
- 梯度的意义及在机器学习中的应用
- PostMessage 窗口无响应
- 怎样判断ios app 第一次启动
- 互斥锁与条件变量
- Andrew Ng-Machine learning (1)
- Linux Nvidia 驱动安装与优化
- 学生赚苹果版作弊,一台苹果设备保底日赚50
- [转]hg(Mercurial)使用参考
- 经常用的android细节
- 《十二生肖运程图》网站欣赏
- Qt 5.3将支持Windows 8/RT (Modern UI), Windows Phone 8
- Android+struts2实现文件图片上传,附源码(侧重服务端开发)