python多线程锁,多线程死锁的例子
本文主要介绍python多线程死锁现象及解决实例。有需要的朋友可以借鉴一下,希望能有所帮助。祝大家进步很大,早日升职加薪。
00-1010本节重点介绍死锁现象和递归锁。
目录
了解死锁现象和解决方法。
本节时长应控制在15分钟以内。
本节重点
死锁是指两个或两个以上的进程或线程在执行过程中因为争夺资源而相互等待的现象。没有外力,他们将无法前进。
此时,系统被称为处于死锁状态或系统有死锁。这些总是在等待对方的进程叫做死锁进程,下面就是死锁。
从螺纹导入螺纹,锁紧
导入时间
mutexA=Lock()
mutexB=Lock()
类MyThread(Thread):
定义运行(自身):
self.func1()
self.func2()
定义功能1(自身):
mutexA.acquire()
Print(\033[41m%s获得一个锁\033[0m %self.name )
mutexB.acquire()
Print(\033[42m%s获得B锁\033[0m %self.name )
mutexB.release()
mutexA.release()
定义功能2(自身):
mutexB.acquire()
Print(\033[43m%s获得B锁\033[0m %self.name )
时间.睡眠(2)
mutexA.acquire()
Print(\033[44m%s获得一个锁\033[0m %self.name )
mutexA.release()
mutexB.release()
if __name__==__main__:
对于范围(10):内的I
t=MyThread()
启动()
实施效果
线程1获得一个锁
线程1获得B锁
线程1获得B锁
Thread-2得到了锁A #并且整个程序被阻塞。
一 死锁现象
解,递归锁。在python中,为了支持在同一线程中对同一资源的多个请求,Python提供了可重入锁RLock。
这个RLock在内部维护一个锁和一个计数器变量,计数器记录获取的次数,以便可以多次获取资源。直到一个线程的所有请求都被释放,其他线程才能获得资源。
在上面的例子中,如果使用RLock而不是Lock,就不会出现死锁。两者的区别在于递归锁可以连续获取多次,而互斥锁只能获取一次。
从线程导入线程,RLock
导入时间
MutexA=mutexB=RLock() #如果线程获得锁,并且计数器增加1,则计数器继续增加1。在此期间,所有其他线程只能等待该线程释放所有锁,也就是说,计数器递减到0。
类MyThread(Thread):
定义运行(自身):
self.func1()
self.func2()
定义功能1(自身):
mutexA.acquire()
Print(\033[41m%s获得一个锁\033[0m %self.name )
mutexB.acquire()
Print(\033[42m%s获得B锁\033[0m %self.name )
mutexB.release()
mutexA.release()
定义功能2(自身):
mutexB.acquire()
Print(\033[43m%s获得B锁\033[0m %self.name )
时间.睡眠(2)
mutexA.acquire()
Print(\033[44m%s获得一个锁\033[0m %self.name )
mutexA.release()
mutexB.release()
if __name__==__main__:
对于范围(10):内的I
t=MyThread()
启动()
以上是python多线程死锁现象及解决方法的详细介绍。关于python多线程死锁解决方案的更多信息,请关注盛行IT软件开发工作室的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。