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

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

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

破坏占有且等待条件

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

破坏不可抢占条件

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

破坏循环等待条件

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

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

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

你可能感兴趣的文章
python-类思想-实现简单增删查改
查看>>
python-网络编程
查看>>
python写入文件出现空行
查看>>
PYTHON-返回给定x的多边形路径的y坐标
查看>>
python-进程池与线程池,协程
查看>>
Python-通过函数传递变量
查看>>
Python内置函数详解——总结篇
查看>>
Python.对象集合中的标识.和散列
查看>>
Python.硒.拖放错误“AttributeError:move_to 需要 WebElement“
查看>>
Python内置函数详解
查看>>
Python/Kivy:从一个类调用函数到另一个类并在 Python 中显示小部件
查看>>
Python/Kivy:我可以在双击标签时调用函数吗
查看>>
python内置函数5-frozenset()
查看>>
Python/Plotly:如何使用要显示的信息自定义悬停模板?
查看>>
Python/Selenium - 无法单击 www.instagram.com 上的“接受 cookie“按钮
查看>>
Python内置函数(35)——next
查看>>
python写入mysql
查看>>
python写入csv老是乱码或者各种不好
查看>>
Python内置函数
查看>>
Python2 安装MySQLdb库
查看>>