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 相关文章推荐
Python 深入理解yield
Sep 06 Python
在Linux上安装Python的Flask框架和创建第一个app实例的教程
Mar 30 Python
Python3写入文件常用方法实例分析
May 22 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
Jul 02 Python
Python 文件处理注意事项总结
Apr 10 Python
Python实现的归并排序算法示例
Nov 21 Python
Django models.py应用实现过程详解
Jul 29 Python
详解python中的生成器、迭代器、闭包、装饰器
Aug 22 Python
python打印直角三角形与等腰三角形实例代码
Oct 20 Python
Python并发concurrent.futures和asyncio实例
May 04 Python
Python可以实现栈的结构吗
May 27 Python
利用python制作拼图小游戏的全过程
Dec 04 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/01/12 PHP
php小型企业库存管理系统的设计与实现代码
2011/05/16 PHP
PHP--用万网的接口实现域名查询功能
2012/12/13 PHP
PHP PDOStatement::execute讲解
2019/01/31 PHP
javascript KeyDown、KeyPress和KeyUp事件的区别与联系
2009/12/03 Javascript
jQuery+css实现图片滚动效果(附源码)
2013/03/18 Javascript
IE8中使用javascript动态加载CSS的解决方法
2014/06/17 Javascript
nodejs实现黑名单中间件设计
2014/06/17 NodeJs
jquery操作 iframe的方法
2014/12/03 Javascript
javascript实现图片延迟加载方法汇总(三种方法)
2015/08/27 Javascript
你不知道的 javascript【推荐】
2017/01/08 Javascript
原生js实现电商侧边导航效果
2017/01/19 Javascript
AngularJS实现根据不同条件显示不同控件
2017/04/20 Javascript
JavaScript 实现自己的安卓手机自动化工具脚本(推荐)
2020/05/13 Javascript
详解vue 组件
2020/06/11 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
[20:46]Ti4循环赛第三日VG vs DK
2014/07/12 DOTA
[01:46]DOTA2上海特锦赛小组赛英文解说KotlGuy采访
2016/02/27 DOTA
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
2018/01/07 Python
python多进程控制学习小结
2018/10/31 Python
matplotlib 画双轴子图无法显示x轴的解决方法
2020/07/27 Python
Python ellipsis 的用法详解
2020/11/20 Python
美国乡村商店:Plow & Hearth
2016/09/12 全球购物
捷克厨房用品购物网站:Tescoma
2018/07/13 全球购物
罗兰·穆雷官网:Roland Mouret
2018/09/28 全球购物
外语专业毕业生自我评价分享
2013/10/05 职场文书
完美主义个人的自我评价
2014/02/17 职场文书
仓管员岗位责任制
2014/02/19 职场文书
在校证明模板
2015/06/17 职场文书
生日赠语
2015/06/23 职场文书
初中班主任教育随笔
2015/08/15 职场文书
解析Redis Cluster原理
2021/06/21 Redis
Python OpenCV实现图像模板匹配详解
2022/04/07 Python
VUE之图片Base64编码使用ElementUI组件上传
2022/04/09 Vue.js
微软官方消息,在 2023 年 4 月 11 日之后微软将不再为 Office 2013 和 Skype for Business 2015 提供安全更新
2022/04/21 数码科技
OpenFeign实现远程调用
2022/08/14 Java/Android