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.避免死锁 程序在设计时要尽量避免死锁.(银行家算法:算法是解决问题的思路) 添加超时时间,银行家算法 '''