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实现的腾讯微博自动发帖小工具
Nov 11 Python
python生成随机验证码(中文验证码)示例
Apr 03 Python
python 中split 和 strip的实例详解
Jul 12 Python
python实现分页效果
Oct 25 Python
Python实现利用163邮箱远程关电脑脚本
Feb 22 Python
python docx 中文字体设置的操作方法
May 08 Python
Django 路由控制的实现
Jul 17 Python
jenkins配置python脚本定时任务过程图解
Oct 29 Python
详解Python3 中的字符串格式化语法
Jan 15 Python
python3操作注册表的方法(Url protocol)
Feb 05 Python
Python如何使用27行代码绘制星星图
Jul 20 Python
详解用 python-docx 创建浮动图片
Jan 24 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 万年历实现代码
2012/10/18 PHP
ThinkPHP3.1新特性之命名范围的使用
2014/06/19 PHP
PHP callback函数使用方法和注意事项
2015/01/23 PHP
php实现通过cookie换肤的方法
2015/07/13 PHP
javascript 获取url参数和script标签中获取url参数函数代码
2010/01/22 Javascript
从零开始学习jQuery (四) jQuery中操作元素的属性与样式
2011/02/23 Javascript
js实现照片墙功能实例
2015/02/05 Javascript
JavaScript中Math.SQRT2属性的使用详解
2015/06/14 Javascript
JavaScript文档碎片操作实例分析
2015/12/12 Javascript
Bootstrap每天必学之折叠(Collapse)插件
2016/04/25 Javascript
js从输入框读取内容,比较两个数字的大小方法
2017/03/13 Javascript
vue-cli构建项目使用 less的方法
2017/10/04 Javascript
JavaScript的数据类型转换原则(干货)
2018/03/15 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
2018/10/31 Javascript
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
2020/08/03 Javascript
微信小程序实现单个或多个倒计时功能
2020/11/01 Javascript
[02:27]2014DOTA2国际邀请赛 VG赛后采访:更大的挑战在等着我们
2014/07/13 DOTA
[01:21]辉夜杯战队访谈宣传片—CDEC
2015/12/25 DOTA
python实现分析apache和nginx日志文件并输出访客ip列表的方法
2015/04/04 Python
Python3读取zip文件信息的方法
2015/05/22 Python
python 上下文管理器使用方法小结
2017/10/10 Python
python 列表,数组和矩阵sum的用法及区别介绍
2018/06/28 Python
让代码变得更易维护的7个Python库
2018/10/09 Python
python实现控制台打印的方法
2019/01/12 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
2020/01/09 Python
Python使用matplotlib绘制圆形代码实例
2020/05/27 Python
Python如何读写CSV文件
2020/08/13 Python
纯CSS3制作漂亮带动画效果的主机价格表
2015/04/25 HTML / CSS
WoolOvers澳洲官方网站:英国针织服装公司
2018/05/13 全球购物
美国在线宠物商店:Chewy
2019/01/12 全球购物
美国购买体育赛事门票网站:TicketCity
2019/03/06 全球购物
争当四好少年演讲稿
2014/09/13 职场文书
优秀教师个人材料
2014/12/15 职场文书
2016年度员工工作表现评语
2015/12/02 职场文书
Python数据分析之pandas读取数据
2021/06/02 Python
tomcat下部署jenkins的方法
2022/05/06 Servers