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程序设计入门(4)模块和包
Jun 16 Python
Python中decorator使用实例
Apr 14 Python
Python操作SQLite数据库的方法详解
Jun 16 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
Mar 15 Python
Django配置celery(非djcelery)执行异步任务和定时任务
Jul 16 Python
python3 map函数和filter函数详解
Aug 26 Python
python获取依赖包和安装依赖包教程
Feb 13 Python
Django ORM实现按天获取数据去重求和例子
May 18 Python
python实现斗地主分牌洗牌
Jun 22 Python
基于python实现可视化生成二维码工具
Jul 08 Python
Pytorch1.5.1版本安装的方法步骤
Dec 31 Python
python网络爬虫实现发送短信验证码的方法
Feb 25 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
smarty缓存用法分析
2014/12/16 PHP
php从memcache读取数据再批量写入mysql的方法
2014/12/29 PHP
在Mac上编译安装PHP7的开发环境
2015/07/28 PHP
php实用代码片段整理
2016/11/12 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
jQuery Validation实例代码 让验证变得如此容易
2010/10/18 Javascript
jqPlot 基于jquery的画图插件
2011/04/26 Javascript
EasyUI中在表单提交之前进行验证
2016/07/19 Javascript
ES6新特性七:数组的扩充详解
2017/04/21 Javascript
react-native ListView下拉刷新上拉加载实现代码
2017/08/03 Javascript
node简单实现一个更改头像功能的示例
2017/12/29 Javascript
vue实现压缩图片预览并上传功能(promise封装)
2019/01/10 Javascript
JQuery 实现文件下载的常用方法分析
2019/10/29 jQuery
vuex+axios+element-ui实现页面请求loading操作示例
2020/02/02 Javascript
python使用reportlab画图示例(含中文汉字)
2013/12/03 Python
python正则表达式及使用正则表达式的例子
2018/01/22 Python
python使用opencv按一定间隔截取视频帧
2018/03/06 Python
Python绘制KS曲线的实现方法
2018/08/13 Python
python 提取key 为中文的json 串方法
2018/12/31 Python
scrapy-redis源码分析之发送POST请求详解
2019/05/15 Python
通过字符串导入 Python 模块的方法详解
2019/10/27 Python
python实现图片插入文字
2019/11/26 Python
Python面向对象之私有属性和私有方法应用案例分析
2019/12/31 Python
如何在python中执行另一个py文件
2020/04/30 Python
Python unittest装饰器实现原理及代码
2020/09/08 Python
html5 offlline 缓存使用示例
2013/06/24 HTML / CSS
Turnbull & Asser官网:英国皇室御用的顶级定制衬衫
2019/01/31 全球购物
美国家居装饰店:Z Gallerie
2020/12/28 全球购物
毕业生的自我评价
2013/12/30 职场文书
给酒店员工的表扬信
2014/01/11 职场文书
演讲稿开场白
2014/01/13 职场文书
企业读书活动总结
2014/06/30 职场文书
检讨书大全
2015/01/27 职场文书
青年教师个人总结
2015/02/11 职场文书
2015年材料员工作总结
2015/04/30 职场文书
2015年保洁员工作总结
2015/05/04 职场文书