• Lv0
    粉丝0

积分6 / 贡献0

提问3答案被采纳0文章0

作者动态

互斥锁问题

xiaochengzi 来自手机 显示全部楼层 发表于 2024-4-4 16:38:46
互斥锁是多线程问题一个重要的内容,若互斥锁在未使用的情况下未释放,会影响整个程序流程的运行,如何在源头避免此类问题?再发生这种情况是又如何纠正?

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

精彩评论1

dragon

沙发 发表于 2024-4-5 15:19:47

互斥锁问题

您想问的是如何避免死锁,和如何解决死锁问题吧?

单个互斥锁很简单,记得解锁即可。


当两个线程为了保护两个不同的共享资源而使用了两个互斥锁,那么这两个互斥锁应用不当的时候,可能会造成两个线程都在等待对方释放锁,在没有外力的作用下,这些线程会一直相互等待,就没办法继续运行,这种情况就是发生了死锁。

死锁只有同时满足以下四个条件才会发生:
互斥条件;
持有并等待条件;
不可剥夺条件;
环路等待条件;



目前处理死锁的方法可以归结为四种:
预防死锁:这是一种较简单和直观的事先预防方法。该方法是通过设置某些限制条件,去破坏产生死锁四个必要条件中的一个或几个来预防产生死锁。预防死锁是一种较易实现的方法,已被广泛使用。
避免死锁:同样是属于事先预防策略,但它并不是事前采取各种限制措施,去破坏产生死锁的四个必要条件,而是在资源的动态分配过程中,用某种方法防止系统进入不安全状态,从而可以避免发生死锁。
检测死锁:这种方法无需事先采取任何限制性措施,允许进程在运行过程中发生死锁。但可通过检测机构及时的检测出死锁的发生,然后采取适当措施,把进程从死锁中解脱出来。
解除死锁:当检测到系统中已发生死锁时,就采取相应措施,将进程从死锁状态中解脱出来。常用的方法是撤销一些进程,回收它们的资源,将它们分配给已处于阻塞状态的进程,使其能继续运行。
上述的四种方法,对死锁的防范程度逐渐减弱,但对应的是资源利用率的提高,以及进程因资源因素而阻塞的频度(即并发程度提高)。


Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部