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交换变量
Sep 06 Python
Python+Selenium自动化实现分页(pagination)处理
Mar 31 Python
python基于ID3思想的决策树
Jan 03 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
Jan 04 Python
Django使用Mysql数据库已经存在的数据表方法
May 27 Python
Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
Dec 24 Python
Python利用requests模块下载图片实例代码
Aug 12 Python
常用python爬虫库介绍与简要说明
Jan 25 Python
python 中的[:-1]和[::-1]的具体使用
Feb 13 Python
关于keras中keras.layers.merge的用法说明
May 23 Python
python与js主要区别点总结
Sep 13 Python
详解Pymongo常用查询方法总结
Jan 29 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
ThinkPHP应用模式扩展详解
2014/07/16 PHP
dedecms中使用php语句指南
2014/11/13 PHP
php array_udiff_assoc 计算两个数组的差集实例
2016/11/12 PHP
PHP+Mysql无刷新问答评论系统(源码)
2016/12/20 PHP
checkbox 多选框 联动实现代码
2008/10/22 Javascript
js鼠标滑过弹出层的定位IE6bug解决办法
2012/12/26 Javascript
js简单实现交换Li的值
2014/05/22 Javascript
在Ubuntu系统上安装Ghost博客平台的教程
2015/06/17 Javascript
require.js的用法详解
2015/10/20 Javascript
JS实现动态生成表格并提交表格数据向后端
2020/11/25 Javascript
Bootstrap轮播插件使用代码
2016/10/11 Javascript
jQuery插件HighCharts绘制的基本折线图效果示例【附demo源码下载】
2017/03/07 Javascript
详解Vue中添加过渡效果
2017/03/20 Javascript
Angular 实现输入框中显示文章标签的实例代码
2018/11/07 Javascript
[02:20]DOTA2中文配音宣传片
2013/05/22 DOTA
Python 2.7.x 和 3.x 版本的重要区别小结
2014/11/28 Python
在Docker上部署Python的Flask框架的教程
2015/04/08 Python
Python实现对PPT文件进行截图操作的方法
2015/04/28 Python
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
Python判断某个用户对某个文件的权限
2016/10/13 Python
解决python 输出是省略号的问题
2018/04/19 Python
深入分析python中整型不会溢出问题
2018/06/18 Python
python3实现往mysql中插入datetime类型的数据
2020/03/02 Python
pandas.DataFrame.drop_duplicates 用法介绍
2020/07/06 Python
Selenium环境变量配置(火狐浏览器)及验证实现
2020/12/07 Python
Canvas与图片压缩的示例代码
2017/11/28 HTML / CSS
Linux如何命名文件--使用文件名时应注意
2012/01/22 面试题
公司委托书范本
2014/04/04 职场文书
大学生社团活动总结
2014/04/26 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
2014年班干部工作总结
2014/11/25 职场文书
2014企业年终工作总结
2014/12/23 职场文书
大一新生军训新闻稿
2015/07/17 职场文书
大学迎新生的欢迎词
2019/06/25 职场文书
python基础学习之递归函数知识总结
2021/05/26 Python
PostGIS的安装与入门使用指南
2022/01/18 PostgreSQL