还是我,又是我,我又来了,那个集美貌与智慧于一身,迷一样的男人!
今天我们开门见喜,不不不,是开门见山的谈一谈线程当中的死锁的情况,翠花,上菜:
1 from threading import Lock,Thread
2 import time
3
4 def test1():
5 #lock1上锁
6 if lock1.acquire():
7 print("----do1 --up")
8 time.sleep(1)
9 #判断lock2是否能上锁,此时lock2锁并没有解锁,需要等到lock2解锁才能上锁
10
11 if lock2.acquire():
12 print("----do2 ---up")
13 #lock1解锁
14 lock1.release()
15
17 def test2():
18 #lock2上锁
19 if lock2.acquire():
20 print("----do2 --up")
21 time.sleep(1)
22
23 #判断lock1是否能上锁,此时lock2锁并没有解锁,需要等到lock1解锁才能上锁
24 if lock1.acquire():
25 print("----do1 ---up")
26 #lock2解锁
27 lock2.release()
28 '''
test1中的lock1在等待test2中lock2解锁才能对lock2上锁,而test2中lock2需要test1中的lock1解锁
才能对lokc1上锁,此时test1中的lock2在等test2中的lock2解锁, 而test2的lock1在等test1中的lock1解
锁,两者程序在这卡住,无法进行下去,此时叫死锁
30 '''
31
33 #创建两把锁
34 lock1 = Lock()
35
36 lock2 = Lock()
37
38 #创建线程实例
39 t1 = Thread(target= test1)
40
41 t2 = Thread(target= test2)
42 #执行线程
43 t1.start()
45 t2.start()
代码中已经学的注释,大家可以仔细看看,程序中出现死锁是很严重的bug,所以我们编写程序代码时要尽量避免出现线程死锁的问题。比如加上参数timeout
超时时间来限制线程执行时间问题。
网友评论