python避免死锁方法实例分析
作者:MaxOmnis 时间:2023-08-04 04:32:59
本文实例讲述了python避免死锁方法。分享给大家供大家参考。具体分析如下:
当两个或者更多的线程在等待资源的时候就会产生死锁,两个线程相互等待。
在本文实例中 thread1 等待thread2释放block , thread2等待thtead1释放ablock,
避免死锁的原则:
1. 一定要以一个固定的顺序来取得锁,这个列子中,意味着首先要取得alock, 然后再去block
2. 一定要按照与取得锁相反的顺序释放锁,这里,应该先释放block,然后是alock
import threading ,time
a = 5
alock = threading.Lock()
b = 5
block = threading.Lock()
def thread1calc():
print "thread1 acquiring lock a"
alock.acquire()
time.sleep(5)
print "thread1 acquiring lock b"
block.acquire()
a+=5
b+=5
print "thread1 releasing both locks"
block.release()
alock.release()
def thread2calc():
print "thread2 acquiring lock b"
block.acquire()
time.sleep(5)
print "thread2 acquiring lock a"
alock.acquire()
time.sleep(5)
a+=10
b+=10
print "thread2 releasing both locks"
block.release()
alock.release()
t = threading.Thread(target = thread1calc)
t.setDaemon(1)
t.start()
t = threading.Thread(target = thread2calc)
t.setDaemon(2)
t.start()
while 1:
time.sleep(300)
输出:
thread1 acquiring lock a
thread2 acquiring lock b
thread1 acquiring lock b
thread2 acquiring lock a
希望本文所述对大家的Python程序设计有所帮助。
标签:python,死锁
0
投稿
猜你喜欢
使用Python编写简单的画图板程序的示例教程
2022-04-28 03:22:15
Python析构函数__del__定义原理解析
2023-01-02 15:20:29
Flask模板引擎之Jinja2语法介绍
2021-11-15 21:08:11
ASP程序开发注意的安全事项
2010-05-03 10:55:00
mysql中使用sql命令将时间戳解析成datetime类型存入
2024-01-22 00:00:25
解决使用export_graphviz可视化树报错的问题
2022-06-10 18:35:59
SQL server 2016 安装步骤图文教程
2024-01-26 07:55:59
Python深度学习实战PyQt5布局管理项目示例详解
2023-03-11 08:47:37
JS自定义混合Mixin函数示例
2024-04-16 10:29:41
matplotlib 纵坐标轴显示数据值的实例
2021-10-02 12:55:43
python采用requests库模拟登录和抓取数据的简单示例
2022-09-21 22:46:55
python实现爬取图书封面
2023-06-08 16:40:44
php Exception异常处理详解
2023-05-29 21:51:37
Python中使用HTMLParser解析html实例
2023-01-17 11:47:16
Python selenium使用autoIT上传附件过程详解
2023-05-23 03:59:13
Python-split()函数实例用法讲解
2023-12-12 07:13:20
Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)
2024-04-16 09:23:29
Golang如何交叉编译各个平台的二进制文件详解
2024-05-22 17:48:47
python中input()与raw_input()的区别分析
2023-02-12 14:08:36
对Python中range()函数和list的比较
2021-08-26 14:59:47