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获取Linux系统的各种信息
Jul 10 Python
Python2和Python3中print的用法示例总结
Oct 25 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
Nov 23 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
Dec 19 Python
Python+threading模块对单个接口进行并发测试
Jun 25 Python
Python使用matplotlib绘制Logistic曲线操作示例
Nov 28 Python
python 遗传算法求函数极值的实现代码
Feb 11 Python
Python tkinter布局与按钮间距设置方式
Mar 04 Python
python logging.info在终端没输出的解决
May 12 Python
如何用Python绘制3D柱形图
Sep 16 Python
python excel多行合并的方法
Dec 09 Python
Python 避免字典和元组的多重嵌套问题
Jul 15 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制作静态网站的模板框架(三)
2006/10/09 PHP
php+js实现图片的上传、裁剪、预览、提交示例
2013/08/27 PHP
php简单获取文件扩展名的方法
2015/03/24 PHP
PHP 实现 WebSocket 协议原理与应用详解
2020/04/22 PHP
jQuery的实现原理的模拟代码 -4 重要的扩展函数 extend
2010/08/03 Javascript
CSS(js)限制页面显示的文本字符长度
2012/12/27 Javascript
JS Date函数整理方便使用
2013/10/23 Javascript
使用js dom和jquery分别实现简单增删改
2014/09/11 Javascript
jQuery的load()方法及其回调函数用法实例
2015/03/25 Javascript
Bootstrap基础学习
2015/06/16 Javascript
基于JQuery实现仿网易邮箱全屏动感滚动插件fullPage
2015/09/20 Javascript
JS实现可编辑的后台管理菜单功能【附demo源码下载】
2016/09/13 Javascript
vuex中使用对象展开运算符的示例
2017/09/25 Javascript
JS实现统计字符串中字符出现个数及最大个数功能示例
2018/06/04 Javascript
jQuery层叠选择器用法实例分析
2019/06/28 jQuery
vue中axios的二次封装实例讲解
2019/10/14 Javascript
微信小程序实现音频文件播放进度的实例代码
2020/03/02 Javascript
[46:27]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第一局
2016/03/02 DOTA
Tornado高并发处理方法实例代码
2018/01/15 Python
python+unittest+requests实现接口自动化的方法
2018/11/29 Python
使用Python计算玩彩票赢钱概率
2019/06/26 Python
Python插入Elasticsearch操作方法解析
2020/01/19 Python
在python里使用await关键字来等另外一个协程的实例
2020/05/04 Python
python实现逢七拍腿小游戏的思路详解
2020/05/26 Python
Python3爬虫关于代理池的维护详解
2020/07/30 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
美国顶级奢侈茶:Mighty Leaf Tea(美泰茶)
2016/11/26 全球购物
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
澳大利亚人信任的清洁平台,您的私人管家:Jarvis
2020/12/25 全球购物
Ajax主要包含了哪些技术
2014/06/12 面试题
就业推荐自我鉴定
2013/10/06 职场文书
自行车广告词大全
2014/03/21 职场文书
会计试用期自我评价怎么写
2014/09/18 职场文书
2014年销售工作总结
2014/12/01 职场文书
人事局接收函
2015/01/31 职场文书
Python爬虫基础讲解之请求
2021/05/13 Python