python避免死锁方法实例分析


Posted in Python onJune 04, 2015

本文实例讲述了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 相关文章推荐
linux 下实现python多版本安装实践
Nov 18 Python
python实现简单温度转换的方法
Mar 13 Python
Django配置celery(非djcelery)执行异步任务和定时任务
Jul 16 Python
Flask入门之上传文件到服务器的方法示例
Jul 18 Python
解决PySide+Python子线程更新UI线程的问题
Jan 11 Python
深度辨析Python的eval()与exec()的方法
Mar 26 Python
python实现截取屏幕保存文件,删除N天前截图的例子
Aug 27 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
Mar 30 Python
基于Keras的格式化输出Loss实现方式
Jun 17 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
Oct 19 Python
Python利用myqr库创建自己的二维码
Nov 24 Python
详解python字符串驻留技术
May 21 Python
python中字符串前面加r的作用
Jun 04 #Python
python生成器generator用法实例分析
Jun 04 #Python
python函数装饰器用法实例详解
Jun 04 #Python
Python中函数的参数定义和可变参数用法实例分析
Jun 04 #Python
python类装饰器用法实例
Jun 04 #Python
python获得一个月有多少天的方法
Jun 04 #Python
Python中threading模块join函数用法实例分析
Jun 04 #Python
You might like
PHP开发中的错误收集,不定期更新。
2011/02/03 PHP
PHP句法规则详解 入门学习
2011/11/09 PHP
关于PHP堆栈与列队的学习
2013/06/21 PHP
php连接odbc数据源并保存与查询数据的方法
2014/12/24 PHP
php写app接口并返回json数据的实例(分享)
2017/05/20 PHP
用JQuery 实现的自定义对话框
2007/03/24 Javascript
javascript 写类方式之二
2009/07/05 Javascript
jquery 表单下所有元素的隐藏
2009/07/25 Javascript
基于Jquery+Ajax+Json的高效分页实现代码
2011/10/29 Javascript
CheckBoxList多选样式jquery、C#获取选择项
2013/09/06 Javascript
使用JavaScript修改浏览器URL地址栏的实现代码
2013/10/21 Javascript
jquery获取元素索引值index()示例
2014/02/13 Javascript
防止登录页面出现在frame中js代码
2014/07/22 Javascript
EasyUI实现第二层弹出框的方法
2015/03/01 Javascript
jQuery中$.extend()用法实例
2015/06/24 Javascript
angular十大常见问题
2017/03/07 Javascript
实例详解display:none与visible:hidden的区别
2017/03/30 Javascript
Vue 实用分页paging实例代码
2017/04/12 Javascript
CheckBox多选取值及判断CheckBox选中是否为空的实例
2017/10/31 Javascript
react配合antd组件实现的管理系统示例代码
2018/04/24 Javascript
在layui中select更改后生效的方法
2019/09/05 Javascript
[01:27:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第一场 1月24日
2021/03/11 DOTA
深入解析Python中函数的参数与作用域
2016/03/20 Python
Python读取sqlite数据库文件的方法分析
2017/08/07 Python
Django使用HttpResponse返回图片并显示的方法
2018/05/22 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
2018/10/16 Python
Python 新建文件夹与复制文件夹内所有内容的方法
2018/10/27 Python
Python坐标线性插值应用实现
2019/11/13 Python
Python绘制组合图的示例
2020/09/18 Python
python matlab库简单用法讲解
2020/12/31 Python
CSS3制作hover下划线动画
2017/03/27 HTML / CSS
毕业设计指导教师评语
2014/12/30 职场文书
教师求职自荐信范文
2015/03/04 职场文书
2015年教师工作总结范文
2015/03/31 职场文书
合作协议书格式范本
2016/03/21 职场文书
Java使用JMeter进行高并发测试
2021/11/23 Java/Android