博客
关于我
Java并发编程--05 |死锁必要条件和解决死锁的方式
阅读量:554 次
发布时间:2019-03-09

本文共 647 字,大约阅读时间需要 2 分钟。

互斥、占有且等待、不可抢占以及循环等待是操作系统中信号量的关键机制。其中互斥条件通过锁保证资源仅能被一个线程占用,但其他三个条件是可以被破坏的。在实际开发中,本文将各条件对应的破坏方法进行了探讨。

破坏占有且等待条件

要实现资源的占有且等待,可以采用星ix机制。具体而言,程序首先必须同时获取两个共享资源(即X和Y),只有在同时成功获取的情况下,程序才会继续执行其功能;否则,程序将直接终止。这种机制确保了程序在资源分配过程中不会陷入无意义的等待状态。

破坏不可抢占条件

实现不可抢占条件的关键在于让线程在资源可用时能够主动释放资源。一种常见的方法是采用 重启机制(Reentrant Multiples自62754rena 这段内容可能有误。请检查输入是否正确。67428),这种机制允许线程在释放资源后重新申请相同的资源,而不会导致死锁或资源泄漏。例如,使用monitor机制时,本质上就是通过重新进入安全区来实现资源的可重入和自释放,从而破坏了传统的不可抢占条件。

破坏循环等待条件

对于循环等待条件,可以通过资源排序的方法实现打破。具体措施是将每个线程请求的资源按照一定的顺序编号,然后在申请时按照编号从小到大进行等待。例如,在一个账户转账的场景中,程序可以为转出账户和转入账户生成一个唯一的编号,并按照编号的大小排序后进行锁的申请。这样,如果多个线程试图同时转账,只能按照排序结果依次执行,避免了死循环等待的可能性。

这种资源排序机制不仅能够有效打破循环等待条件,还能显著降低死锁率。

转载地址:http://rlqsz.baihongyu.com/

你可能感兴趣的文章
Python:Google API - 从消息中获取 mimeTypes
查看>>
Python:Google API - 从消息中获取 mimeTypes
查看>>
Python:subprocess.call,stdout to file,stderr to file,在屏幕上实时显示stderr
查看>>
Python:TypeError:无法连接“str“和“int“对象
查看>>
Python:XPath 在 ElementTree 中不可用
查看>>
Python:从 FTP 服务器下载文件
查看>>
python:从列表中创建元组列表
查看>>
Python:从嵌套列表中删除重复项
查看>>
Python:从间隔映射到值
查看>>
Python:使用 shell=False 的子进程调用不起作用
查看>>
Python:修改 PATH 环境变量的平台无关方式
查看>>
Python:假与 0
查看>>
Python:函数使用
查看>>
Python:函数进阶
查看>>
Python:在整数的二进制表示中查找最长的二进制间隙
查看>>
Python:如何从二进制转换为 base 64 并返回?
查看>>
Python:如何以非阻塞方式读取子进程的标准输出
查看>>
Python:如何使用 plotly 制作阴影区域或交替背景颜色?
查看>>
Python:如何根据日期时间获取值的计数
查看>>
python:如何检测串行 COM 上的设备名称/ID
查看>>