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 相关文章推荐
Python3基础之条件与循环控制实例解析
Aug 13 Python
Python中线程的MQ消息队列实现以及消息队列的优点解析
Jun 29 Python
Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
Jul 11 Python
python对json的相关操作实例详解
Jan 04 Python
详解Python核心对象类型字符串
Feb 11 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
Feb 21 Python
对PyQt5中的菜单栏和工具栏实例详解
Jun 20 Python
python中while和for的区别总结
Jun 28 Python
python装饰器的特性原理详解
Dec 25 Python
通过实例解析Python return运行原理
Mar 04 Python
python中查看.db文件中表格的名字及表格中的字段操作
Jul 07 Python
进行数据处理的6个 Python 代码块分享
Apr 06 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
hadoop中一些常用的命令介绍
2013/06/19 PHP
PHP连接MySQL的2种方法小结以及防止乱码
2014/03/11 PHP
PHP中使用memcache存储session的三种配置方法
2014/04/05 PHP
Laravel 5 框架入门(一)
2015/04/09 PHP
curl 出现错误的调试方法(必看)
2017/02/13 PHP
jquery ajax属性async(同步异步)示例
2013/11/05 Javascript
jquery选择器之基本过滤选择器详解
2014/01/27 Javascript
jquery动态添加元素事件失效问题解决方法
2014/05/23 Javascript
js+CSS实现弹出居中背景半透明div层的方法
2015/02/26 Javascript
浅析jQuery 3.0中的Data
2016/06/14 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
2016/11/03 Javascript
详解在Vue中通过自定义指令获取dom元素
2017/03/04 Javascript
使用Vue.js和Flask来构建一个单页的App的示例
2018/03/21 Javascript
VUE脚手架具体使用方法
2019/05/20 Javascript
javascript的this关键字详解
2019/05/20 Javascript
js实现无缝滚动双图切换效果
2019/07/09 Javascript
vue项目实现设置根据路由高亮对应的菜单项操作
2020/08/06 Javascript
vuecli项目构建SSR服务端渲染的实现
2020/10/30 Javascript
Python的Scrapy爬虫框架简单学习笔记
2016/01/20 Python
python检测主机的连通性并记录到文件的实例
2018/06/21 Python
Python读取指定日期邮件的实例
2019/02/01 Python
Django认证系统实现的web页面实现代码
2019/08/12 Python
keras .h5转移动端的.tflite文件实现方式
2020/05/25 Python
Python性能分析工具py-spy原理用法解析
2020/07/27 Python
丝绸和人造花卉、植物和树木:Nearly Natural
2018/11/28 全球购物
The Hut英国:英国领先的豪华在线百货商店
2019/07/26 全球购物
30岁生日感言
2014/01/25 职场文书
品质主管岗位职责
2014/03/16 职场文书
竞选班干部演讲稿400字
2014/08/20 职场文书
医疗专业毕业生求职信
2014/08/28 职场文书
群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
聚会通知怎么写
2015/04/23 职场文书
婚礼家长致辞
2015/07/27 职场文书
防溺水主题班会教案
2015/08/12 职场文书
php png失真的原因及解决办法
2021/10/24 PHP
搭建Yolov5服务器
2022/04/30 Servers