如何避免出现死锁

    技术2022-05-20  36

    在并发程序设计中,死锁 (deadlock) 是一种十分常见的逻辑错误。通过采用正确的编程方式,死锁的发生不难避免.

     

    死锁的四个必要条件

    互斥(Mutual exclusion):存在这样一种资源,它在某个时刻只能被分配给一个执行绪(也称为线程)使用; 占有且等待(Hold and wait):当请求的资源已被占用从而导致执行绪阻塞时,资源占用者不但无需释放该资源,而且还可以继续请求更多资源; 不可抢占(No preemption):执行绪获得到的互斥资源不可被强行剥夺,换句话说,只有资源占用者自己才能释放资源; 环形等待(Circular wait):若干执行绪以不同的次序获取互斥资源,从而形成环形等待的局面,想象在由多个执行绪组成的环形链中,每个执行绪都在等待下一个执行绪释放它持有的资源。 这四个条件都是死锁发生所必须的条件,只要破坏这其中的某一个条件就行了。 另外还有:银行家算法就是个学院派的东西,我至今没看到哪个系统用这种方法预防死锁!用一句话来概括就是:理论上可行的东西,实践上未必可行!通常避免死锁类的方法,实现起来都不可行,包括单一资源和多种资源的银行家算法,以及两阶段加锁法。


    最新回复(0)