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调用cmd命令行制作刷博器
Jan 13 Python
解决uWSGI的编码问题详解
Mar 24 Python
python实现决策树分类算法
Dec 21 Python
Python字典及字典基本操作方法详解
Jan 30 Python
python email smtplib模块发送邮件代码实例
Apr 26 Python
python3获取当前文件的上一级目录实例
Apr 26 Python
Python实现拷贝/删除文件夹的方法详解
Aug 29 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
Feb 18 Python
Python使用Paramiko控制liunx第三方库
May 20 Python
Python Scrapy多页数据爬取实现过程解析
Jun 12 Python
django跳转页面传参的实现
Sep 17 Python
基于OpenCV的路面质量检测的实现
Nov 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结合JQueryJcrop实现图片裁切实例详解
2014/07/24 PHP
php实现扫描二维码根据浏览器类型访问不同下载地址
2014/10/15 PHP
PHP IDE phpstorm 常用快捷键
2015/05/18 PHP
php操作redis缓存方法分享
2015/06/03 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
2016/10/13 PHP
thinkPHP商城公告功能开发问题分析
2016/12/01 PHP
ThinkPHP实现登录退出功能
2017/06/29 PHP
PHP实现新型冠状病毒疫情实时图的实例
2020/02/04 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
javascript中xml操作实现代码
2011/11/21 Javascript
js实现目录定位正文示例
2013/11/14 Javascript
JavaScript数据类型检测代码分享
2015/01/26 Javascript
javascript实现二级级联菜单的简单制作
2015/11/19 Javascript
JavaScript 继承详解(五)
2016/10/11 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
2016/12/01 Javascript
jquery的父、子、兄弟节点查找,节点的子节点循环方法
2016/12/07 Javascript
使用原生js编写一个简单的框选功能方法
2019/05/13 Javascript
JS控制GIF图片的停止与显示
2019/10/24 Javascript
微信小程序自定义导航栏(模板化)
2019/11/15 Javascript
[54:06]OG vs TNC 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
自动化Nginx服务器的反向代理的配置方法
2015/06/28 Python
Python实现针对中文排序的方法
2017/05/09 Python
解析Python中的eval()、exec()及其相关函数
2017/12/20 Python
Django 开发环境配置过程详解
2019/07/18 Python
canvas像素画板的实现代码
2018/11/21 HTML / CSS
说出ArrayList,Vector, LinkedList的存储性能和特性
2015/01/04 面试题
Java里面如何创建一个内部类的实例
2015/01/19 面试题
输入N,打印N*N矩阵
2012/02/20 面试题
Unix/Linux开发面试题
2016/08/16 面试题
公司担保书格式范文
2014/05/12 职场文书
趣味运动会广播稿
2014/09/13 职场文书
大学生自我评价200字(4篇)
2014/09/17 职场文书
房屋授权委托书范本
2014/10/07 职场文书
新年祝酒词大全
2015/08/11 职场文书
Redis之RedisTemplate配置方式(序列和反序列化)
2022/03/13 Redis
MySQL插入数据与查询数据
2022/03/25 MySQL