#死锁
'''
开发过程中使用线程,在线程间共享多个资源的时候,
如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁。
尽管死锁很少发生,但一旦发生就会造成应用的停止响应,程序不做任何事情。
避免死锁:
解决:
1.重构代码
2.添加超时释放锁
'''
from threading import Thread,Lock
import sys
import time
lockA = Lock()
lockB = Lock()
#自定义线程
class MyThread1(Thread):
#不论进程还是线程重写的都是run方法
def run(self):
if lockA.acquire():#如果可以获取到锁则返回True
print(self.name +'A锁')
time.sleep(0.1)
if lockB.acquire(timeout=3):#在acquire函数中阻塞,一直等待锁,不能往下运行了
#如果加上超时则表示退出acquire,继续往下执行把a锁释放了
print(self.name +"A锁+B锁")
lockB.release()
lockA.release()
#自定义线程
class MyThread2(Thread):
#不论进程还是线程重写的都是run方法
def run(self):
if lockB.acquire():#如果可以获取到锁则返回True
print(self.name +'B锁')
time.sleep(0.1)
if lockA.acquire(timeout=3):
print(self.name +"A锁+B锁")
lockA.release()
lockB.release()
def main():
pass
if __name__ == "__main__":
#若不加上超时,则会一直不能进入A锁+B锁情况。
#造成线程1,2一直死等
MyThread1().start()
MyThread2().start()
sys.exit(int(main() or 0))
Python 死锁(笔记总结)
原创
©著作权归作者所有:来自51CTO博客作者阿ou同学的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:Python global
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
OS学习笔记八:死锁
一、死锁的基本概念1、死锁的定义一组进程中,每个进程都无限等待被该组进程中另的。尽管这个问题不
线程 os 进程 操作系统 死锁 -
Oracle 死锁与慢查询总结
## 查看死锁 ```sql SELECT s.sid "会话ID",
oracle 死锁查询 慢查询 SQL sql