聊聊线程之死锁的前世今生

还是我,又是我,我又来了,那个集美貌与智慧于一身,迷一样的男人!

今天我们开门见喜,不不不,是开门见山的谈一谈线程当中的死锁的情况,翠花,上菜:

 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超时时间来限制线程执行时间问题。

你可能感兴趣的:(聊聊线程之死锁的前世今生)