美文网首页软件测试精进之路
聊聊线程之死锁的前世今生

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

作者: 胆小的米老鼠 | 来源:发表于2018-08-07 13:16 被阅读2次

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

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

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

    相关文章

      网友评论

        本文标题:聊聊线程之死锁的前世今生

        本文链接:https://www.haomeiwen.com/subject/gawovftx.html