14.死锁及死锁的解决方法

#1.死锁
'''
在线程间共享多个资源的时候,如果两个线程分别占有一部分资源,并且同时等待对方资源时,就会造成死锁
尽管死锁很少发生,但一旦发生就会造成应用的停止响应
'''
#2.例子:有两个人分别做"西兰花"和"红烧肉",每个人都需要"锅"和"铲子"
import threading,time
class XiLanHua_Thread(threading.Thread):
    def run(self):
        mutexFlag_C = mutex_C.acquire(True)
        if mutexFlag_C:
            print(self.name + "拿到了铲子")
            # 表示使用资源消耗的时间
            # time.sleep(1)
            mutexFlag_G = mutex_G.acquire(True)
            if mutexFlag_G:
                print(self.name + "拿到了锅")
                mutex_G.release()
            mutex_C.release()
            print(self.name + "使用完成了")

class HongShaoRou_Thread(threading.Thread):
    def run(self):

        mutexFlag_G = mutex_G.acquire(True)
        if mutexFlag_G:
            print(self.name + "拿到了锅")
            #表示使用资源消耗的时间
            # time.sleep(1)
            mutexFlag_C = mutex_C.acquire(True)
            if mutexFlag_C:
                print(self.name + "拿到了铲子")
                mutex_C.release()
            mutex_G.release()
            print(self.name + "使用完成了")

if __name__ == "__main__":
    mutex_C = threading.Lock()
    mutex_G = threading.Lock()

    t1 = XiLanHua_Thread()
    t2 = HongShaoRou_Thread()
    t1.start()
    t2.start()
'''
3.避免死锁
程序在设计时要尽量避免死锁.(银行家算法:算法是解决问题的思路)
添加超时时间,银行家算法
'''
原文地址:https://www.cnblogs.com/zhangboblogs/p/8627577.html