OpenHarmony开发者论坛
标题:
互斥锁问题
[打印本页]
作者:
xiaochengzi
时间:
2024-4-4 16:38
标题:
互斥锁问题
互斥锁是多线程问题一个重要的内容,若互斥锁在未使用的情况下未释放,会影响整个程序流程的运行,如何在源头避免此类问题?再发生这种情况是又如何纠正?
作者:
dragon
时间:
2024-4-5 15:19
标题:
互斥锁问题
您想问的是如何避免死锁,和如何解决死锁问题吧?
单个互斥锁很简单,记得解锁即可。
当两个线程为了保护两个不同的共享资源而使用了两个互斥锁,那么这两个互斥锁应用不当的时候,可能会造成两个线程都在等待对方释放锁,在没有外力的作用下,这些线程会一直相互等待,就没办法继续运行,这种情况就是发生了死锁。
死锁只有同时满足以下四个条件才会发生:
互斥条件;
持有并等待条件;
不可剥夺条件;
环路等待条件;
目前处理死锁的方法可以归结为四种:
预防死锁
:这是一种较简单和直观的事先预防方法。该方法是通过设置某些限制条件,去破坏产生死锁四个必要条件中的一个或几个来预防产生死锁。预防死锁是一种较易实现的方法,已被广泛使用。
避免死锁
:同样是属于事先预防策略,但它并不是事前采取各种限制措施,去破坏产生死锁的四个必要条件,而是在资源的动态分配过程中,用某种方法防止系统进入不安全状态,从而可以避免发生死锁。
检测死锁
:这种方法无需事先采取任何限制性措施,允许进程在运行过程中发生死锁。但可通过检测机构及时的检测出死锁的发生,然后采取适当措施,把进程从死锁中解脱出来。
解除死锁
:当检测到系统中已发生死锁时,就采取相应措施,将进程从死锁状态中解脱出来。常用的方法是撤销一些进程,回收它们的资源,将它们分配给已处于阻塞状态的进程,使其能继续运行。
上述的四种方法,对死锁的防范程度逐渐减弱,但对应的是资源利用率的提高,以及进程因资源因素而阻塞的频度(即并发程度提高)。
欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/)
Powered by Discuz! X3.5