在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁。
尽管死锁很少发生,但一旦发生就会造成应用的停止响应。下面看一个死锁的例子
from threading import Thread, Lock
import time
mutex1= Lock() # 创建一个互斥锁
mutex2= Lock() # 创建一个互斥锁
def fun1():
mutex1.acquire()
print("线程1 锁住了mutex1")
time.sleep(0.1)
mutex2.acquire()
print("线程1 锁住了mutex2")
print("线程1 hello")
mutex1.release()
mutex2.release()
def fun2():
mutex2.acquire()
print("线程2 锁住了mutex2")
time.sleep(0.1)
mutex1.acquire()
print("线程2 锁住了mutex1")
print("线程2 hi")
mutex1.release()
mutex2.release()
t1 =Thread(target=fun1) # 创建一个线程对象
t2 =Thread(target=fun2) # 创建一个线程对象
t1.start() # 开启线程的执行
t2.start()
t1.join() # 回收线程资源
t2.join()