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根据京东商品url获取产品价格
Aug 09 Python
python: line=f.readlines()消除line中\n的方法
Mar 19 Python
推荐10款最受Python开发者欢迎的Python IDE
Sep 16 Python
Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】
Dec 11 Python
python 字符串常用方法汇总详解
Sep 16 Python
Python实现图像去噪方式(中值去噪和均值去噪)
Dec 18 Python
详解Django配置JWT认证方式
May 09 Python
keras实现图像预处理并生成一个generator的案例
Jun 17 Python
使用keras实现非线性回归(两种加激活函数的方式)
Jul 05 Python
Python如何在bool函数中取值
Sep 21 Python
Python基础之常用库常用方法整理
Apr 30 Python
在python中实现导入一个需要传参的模块
May 12 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 时间转换Unix时间戳代码
2010/01/22 PHP
PHP调用Twitter的RSS的实现代码
2010/03/10 PHP
php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)
2010/05/16 PHP
PHP排序算法的复习和总结
2012/02/15 PHP
PHP反射机制用法实例
2014/08/28 PHP
Yii获取当前url和域名的方法
2015/06/08 PHP
php传值赋值和传地址赋值用法实例分析
2015/06/20 PHP
实例讲解yii2.0在php命令行中运行的步骤
2015/12/01 PHP
PHP API接口必备之输出json格式数据示例代码
2017/06/27 PHP
Thinkphp 框架扩展之数据库驱动常用方法小结
2020/04/23 PHP
JQuery EasyUI 日期控件如何控制日期选择区间
2014/05/05 Javascript
js控制网页背景音乐播放与停止的方法
2015/02/06 Javascript
jquery实现选中单选按钮下拉伸缩效果
2015/08/06 Javascript
Nodejs爬虫进阶教程之异步并发控制
2016/02/15 NodeJs
基于Bootstrap重置输入框内容按钮插件
2016/05/12 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
2016/08/05 Javascript
JS验证input输入框(字母,数字,符号,中文)
2017/03/23 Javascript
浅析从vue源码看观察者模式
2018/01/29 Javascript
JS实现访问DOM对象指定节点的方法示例
2018/04/04 Javascript
vue监听对象及对象属性问题
2018/08/20 Javascript
Phaser.js实现简单的跑酷游戏附源码下载
2018/10/26 Javascript
python基于xml parse实现解析cdatasection数据
2014/09/30 Python
详解用python写一个抽奖程序
2019/05/10 Python
Python函数参数匹配模型通用规则keyword-only参数详解
2019/06/10 Python
python科学计算之narray对象用法
2019/11/25 Python
python socket通信编程实现文件上传代码实例
2019/12/14 Python
Perry Ellis官网:美国男士品味服装
2016/12/09 全球购物
美国在线鲜花速递:ProFlowers
2017/01/05 全球购物
英文求职信写作小建议
2014/02/16 职场文书
幼儿园中班下学期评语
2014/04/18 职场文书
工会趣味活动方案
2014/08/18 职场文书
交通局领导班子群众路线教育实践活动对照检查材料思想汇报
2014/10/09 职场文书
汽车车尾标语大全
2015/08/11 职场文书
互联网的下一个风口:新的独角兽将诞生
2019/08/02 职场文书
mysql5.7使用binlog 恢复数据的方法
2021/06/03 MySQL
Spring Boot项目如何优雅实现Excel导入与导出功能
2022/06/10 Java/Android