#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、避免死锁 # 程序设计时要尽量避免死锁。(银行家算法) # 添加超时时间。
/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6 /Users/apple/PycharmProjects/stage4/thread/t13.py
Thread-1拿到了铲子
Thread-2拿到了锅
===一直僵持,没有结束=======