8.Python网络编程_多线程死锁

Posted 好好学习,天天向上

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了8.Python网络编程_多线程死锁相关的知识,希望对你有一定的参考价值。

死锁:指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

  此程序的两个线程会因为互相等待对方的互斥锁而陷入等待,最后由于主线程执行完毕而结束了各个子线程,从而程序结束。

 1 import threading
 2 import time
 3 
 4 class MyThread1(threading.Thread):
 5     def run(self):
 6         #对mutexA上锁
 7         mutexA.acquire()
 8         
 9         #mutexA上锁,延时1秒,等待另外那个线程,把mutexB上锁
10         print(self.name+----do1---up----)
11         time.sleep(1)
12         
13         #此时会堵塞,因为这个mutexA已经被另外的线程抢先上锁了
14         mutexB.acquire()
15         print(self.name+----do2---down----)
16         mutexB.release()
17         
18         #对mutexA解锁
19         mutexA.release()
20         
21 class MyThread2(threading.Thread):
22     def run(self):
23         #对mutexA上锁
24         mutexB.acquire()
25         
26         #mutexA上锁,延时1秒,等待另外那个线程,把mutexB上锁
27         print(self.name+----do1---up----)
28         time.sleep(1)
29         
30         #此时会堵塞,因为这个mutexA已经被另外的线程抢先上锁了
31         mutexA.acquire()
32         print(self.name+----do2---down----)
33         mutexA.release()
34         
35         #对mutexB解锁
36         mutexB.release()
37         
38 
39 if __name__==__main__:
40     mutexA=threading.Lock()
41     mutexB=threading.Lock()
42     t1=MyThread1()
43     t2=MyThread2()
44     t1.start()
45     t2.start()
46         

 

避免死锁的方法:1.添加超时时间 2.各类算法

 

 

 

 

 

以上是关于8.Python网络编程_多线程死锁的主要内容,如果未能解决你的问题,请参考以下文章

网络编程基础--多线程---concurrent.futures 模块---事件Event---信号量Semaphore---定时器Timer---死锁现象 递归锁----线程队列queue(示例代码

多线程编程之线程死锁问题

温故Java基础多线程编程—线程安全

python并发编程之多线程2------------死锁与递归锁,信号量等

python多线程编程: 死锁和可重入锁

python 并发编程 多线程 死锁现象与递归锁