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-基础-入门 简介
Aug 09 Python
Python multiprocessing.Manager介绍和实例(进程间共享数据)
Nov 21 Python
python学习数据结构实例代码
May 11 Python
Python中列表和元组的相关语句和方法讲解
Aug 20 Python
python实现中文转换url编码的方法
Jun 14 Python
详解Django 时间与时区设置问题
Jul 23 Python
python 扩展print打印文件路径和当前时间信息的实例代码
Oct 11 Python
原来我一直安装 Python 库的姿势都不对呀
Nov 11 Python
Python 类的魔法属性用法实例分析
Nov 21 Python
python使用opencv resize图像不进行插值的操作
Jul 05 Python
基于python实现判断字符串是否数字算法
Jul 10 Python
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
May 22 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
中国第一家无线电行
2021/03/01 无线电
PHP随机字符串生成代码(包括大小写字母)
2013/06/24 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
2013/11/07 PHP
Thinkphp中数据按分类嵌套循环实现方法
2014/10/30 PHP
PHP下的浮点运算不准的解决方法
2016/10/27 PHP
PHP面向对象中new self()与 new static()的区别浅析
2017/08/17 PHP
Thinkphp页面跳转设置跳转等待时间的操作
2019/10/16 PHP
iframe子父页面调用js函数示例
2013/11/07 Javascript
js获取触发事件元素在整个网页中的绝对坐标(示例代码)
2013/12/13 Javascript
jquery append()方法与html()方法的区别及使用介绍
2014/08/01 Javascript
Flexigrid在IE下不显示数据的有效处理方法
2014/09/04 Javascript
JS是按值传递还是按引用传递
2015/01/30 Javascript
angularjs创建弹出框实现拖动效果
2020/08/25 Javascript
深入学习jQuery Validate表单验证
2016/01/18 Javascript
jquery注册文本框获取焦点清空,失去焦点赋值的简单实例
2016/09/08 Javascript
vue.js select下拉框绑定和取值方法
2018/03/03 Javascript
JS解析后台返回的JSON格式数据实例
2018/08/06 Javascript
微信小程序模板template简单用法示例
2018/12/04 Javascript
微信小程序配置服务器提示验证token失败的解决方法
2019/04/03 Javascript
[42:22]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第一局
2016/02/27 DOTA
跟老齐学Python之使用Python操作数据库(1)
2014/11/25 Python
Python中用pycurl监控http响应时间脚本分享
2015/02/02 Python
Python的装饰器模式与面向切面编程详解
2015/06/21 Python
Python网络爬虫实例讲解
2016/04/28 Python
浅析Python3爬虫登录模拟
2018/02/07 Python
Django Admin实现三级联动的示例代码(省市区)
2018/06/22 Python
详解python之heapq模块及排序操作
2019/04/04 Python
Python浮点数四舍五入问题的分析与解决方法
2019/11/19 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
2020/02/26 Python
pandas DataFrame 数据选取,修改,切片的实现
2020/04/24 Python
将python字符串转化成长表达式的函数eval实例
2020/05/11 Python
python interpolate插值实例
2020/07/06 Python
深深扎根运动世界的生活品牌:Tillys
2017/10/30 全球购物
Marlies Dekkers内衣法国官方网上商店:国际知名的荷兰内衣品牌
2019/03/18 全球购物
检讨书格式范文
2015/05/07 职场文书
汤姆叔叔的小屋读书笔记
2015/06/30 职场文书