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

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

作者: 胆小的米老鼠 | 来源:发表于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超时时间来限制线程执行时间问题。

相关文章

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

    还是我,又是我,我又来了,那个集美貌与智慧于一身,迷一样的男人! 今天我们开门见喜,不不不,是开门见山的谈一谈线程...

  • Unity C#基础之 多线程的前世今生(下) 扩展篇

    在前面两篇Unity C#基础之 多线程的前世今生(上) 科普篇和Unity C#基础之 多线程的前世今生(中) ...

  • JavaEE面试题总结 Day39 2018-12-29

    什么是线程死锁?死锁如何产生?如何避免线程死锁? 死锁的介绍: 线程死锁是指由于两个或者多个线程互相持有对方所需要...

  • Python中的各种锁

    Python之死锁 死锁分为两种情况,多进程/线程的死锁.或者是单线程的死锁. 1.首先看一下单线程的死锁,单线程...

  • 前世今生

    佛说因果,今生果报是由前世之因。 人们常想是否有前世。我觉得前世是有的,昨天便是前世,今天便是今生。昨日所中之因,...

  • 聊聊 print 的前世今生

    本文原创并首发于公众号【Python猫】,未经授权,请勿转载。 原文地址:https://mp.weixin.qq...

  • 5. 死锁

    线程死锁 死锁是两个或更多线程阻塞着等待其它处于死锁状态的线程所持有的锁。死锁通常发生在多个线程同时但以不同的顺序...

  • 伴浮生

    不念前世,不待来生 有谁在细语今生 不念前世,不待来生 有谁在相思今生 长情伴浮生 得之我之幸

  • 线程池的前世今生

    对于一个话题,他不是读一本书,而是读五本。 -- Mike Slade To Bil...

  • 线程池的前世今生

    线程池是池化技术的一种实现,用户对线程做统一的管理,通过统一的管理来降低资源的消耗与提高资源的利用率。 本文将通过...

网友评论

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

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