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