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 判断一个进程是否存在
Apr 09 Python
python实现人人网登录示例分享
Jan 19 Python
Python自动调用IE打开某个网站的方法
Jun 03 Python
python正则表达式的使用
Jun 12 Python
解决python爬虫中有中文的url问题
May 11 Python
PyTorch线性回归和逻辑回归实战示例
May 22 Python
Python字符串逆序输出的实例讲解
Feb 16 Python
十分钟搞定pandas(入门教程)
Jun 21 Python
Django CBV与FBV原理及实例详解
Aug 12 Python
使用Python制作缩放自如的圣诞老人(圣诞树)
Dec 25 Python
python等待10秒执行下一命令的方法
Jul 19 Python
Python通过format函数格式化显示值
Oct 17 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
利用JQuery为搜索栏增加tag提示
2009/06/22 Javascript
jQuery.validate 常用方法及需要注意的问题
2013/03/20 Javascript
js函数名与form表单元素同名冲突的问题
2014/03/07 Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
2014/08/22 Javascript
JS去除iframe滚动条的方法
2015/04/01 Javascript
创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件
2016/06/02 Javascript
CSS+jQuery实现简单的折叠菜单
2016/12/20 Javascript
Angular 4依赖注入学习教程之简介(一)
2017/06/04 Javascript
详解使用webpack构建多页面应用
2017/12/21 Javascript
VSCode中如何利用d.ts文件进行js智能提示
2018/04/13 Javascript
Vue验证码60秒倒计时功能简单实例代码
2018/06/22 Javascript
Vue data的数据响应式到底是如何实现的
2020/02/11 Javascript
JavaScript使用prototype属性实现继承操作示例
2020/05/22 Javascript
Python编程之变量赋值操作实例分析
2017/07/24 Python
用十张图详解TensorFlow数据读取机制(附代码)
2018/02/06 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
2018/02/18 Python
对python中Librosa的mfcc步骤详解
2019/01/09 Python
Python使用pymongo库操作MongoDB数据库的方法实例
2019/02/22 Python
零基础使用Python读写处理Excel表格的方法
2019/05/02 Python
快速解决pyqt5窗体关闭后子线程不同时退出的问题
2019/06/19 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
pycharm sciview的图片另存为操作
2020/06/01 Python
Python Scrapy多页数据爬取实现过程解析
2020/06/12 Python
python matlab库简单用法讲解
2020/12/31 Python
最新奶茶店创业计划书范文
2014/02/08 职场文书
事业单位竞聘上岗实施方案
2014/03/28 职场文书
大学学风建设方案
2014/05/04 职场文书
珍惜资源的建议书
2014/08/26 职场文书
初中生散播谣言检讨书
2014/11/17 职场文书
龙潭大峡谷导游词
2015/02/10 职场文书
结婚通知短信大全
2015/04/17 职场文书
公司员工违纪检讨书
2015/05/05 职场文书
运动会通讯稿300字
2015/07/20 职场文书
OpenCV-Python实现怀旧滤镜与连环画滤镜
2021/06/09 Python
Redis特殊数据类型HyperLogLog基数统计算法讲解
2022/06/01 Redis
HTML5中的DOCUMENT.VISIBILITYSTATE属性详解
2023/05/07 HTML / CSS