死锁
来源:互联网 发布:易语言json取true 编辑:程序博客网 时间:2024/05/21 11:15
所谓死锁,是指各并发进程彼此互相等待对方所拥有的资源,且这些并发进程在得到对方的资源之前不会释放自己所拥有的资源,从而造成大家都想得到资源而又都得不到资源,各并发进程不能继续向前推进的状态。
死锁的起因是并发进程的资源竞争,产生死锁的根本原因在于系统提供的资源个数少于并发进程所要求的该类资源数。
死锁产生的必要条件:
(1)互斥条件,并发进程所要求和占有的资源是不能同时被两个以上进程使用或操作,进程对它所需要的资源进行排他性控制。
(2)不剥夺条件,进程所获得的资源在未使用完毕之前,不能被其他进程强行剥夺,而只能由自己释放;
(3)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。
(4)环路等待条件,指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。
避免死锁方法:
(1)可以通过小心地控制互斥量加锁的顺序来避免死锁的发生。例如,假设需要对两个互斥量A和B同时加锁,如果所有线程总是在对互斥量B加锁之前锁住互斥量A,那么使用这两个互斥量不会发生死锁。即对互斥量进行排序。
(2)有时候应用程序的结构使得对互斥量加锁进行排序是很困难的,那么在线程在占有互斥量A,并希望获得互斥量B时,如果B已经被锁住,那么可以先释放占有的锁,然后过一段时间再试,这种情况可以使用pthread_mutex_trylock接口避免死锁。如果已经占有某些锁而且pthread_mutex_trylock接口返回成功,那么就可以前进;但是,如果不能获得锁,可以先释放已经占有的锁,做好清理工作,然后过一段时间重新尝试。
避免死锁的算法:
银行家算法,
处理方法
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 单元测试准则
- 使用windows远程桌面连接拷贝远程电脑上文件到本地的方法
- 关于android中SQLite基本操作
- chapter 3(第二部分)
- 用户名验证
- 死锁
- perl 语言学习笔记
- 变长结构体的用法
- 关联规则(一)Apriori算法
- js转化毫秒为时间格式
- S5PV210之UBOOT-2011.06启动过程解析-基于u-boot for tiny210 ver3.1 (by liukun321咕唧咕唧)
- 11 简单设计模式
- 2013杭州 J题 shaolin
- 如何在oracle中导入导出dmp数据库文件