死锁就是一个线程需要的锁在另外一个线程哪里,而自己手里拿着他需要的锁,一次死锁,代码如下:
from threading import Lock,Thread
mutex_a = Lock()
mutex_b = Lock()
class Mythread(Thread):
def run(self):
self.fun1()
self.fun2()
def fun1(self):
mutex_a.acquire()
print("get a")
mutex_b.acquire()
print("get b")
mutex_b.release()
mutex_a.release()
def fun2(self):
mutex_b.acquire()
print("get B")
import time
time.sleep(2)
mutex_a.acquire()
print("get A")
mutex_a.release()
mutex_b.release()
if __name__ == '__main__':
for i in range(8):
thread_test = Mythread()
thread_test.start()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
结果如下:
解释如下
#死锁产生原因 首先线程1 抢到A锁 其他抢不到等着,接着抢到B锁 其他任然抢A
#接着释放B锁,别的进程任然抢A接着释放A锁,别的进程抢到A锁,线程1抢到B锁,然后睡了2秒
#其他要抢B锁,B锁在线程1上,然后线程1要抢A锁,A锁在线程2上,索要之锁都在别的线程中,所以死锁