Python连载35-死锁问题以及解决方式
一、死锁问题
- 例子
import threading import time lock_1 = threading.Lock() lock_2 = threading.Lock() def func_1(): print("func_1 starting......") lock_1.acquire()#我先占上lock_1 print("func_1 申请了 lock_1.....") time.sleep(2)#必须得等一下啊,让这这两个函数形成死锁 print("func_1 等待lock_2......") lock_2.acquire() print("func_1 申请了lock_2") lock_2.release() print("func_1 释放了 lock_2") lock_1.release() print("func_1 释放了 lock_1") print("func_1 done") def func_2(): print("func_2 staring......") lock_2.acquire()#我先占上lock_2 print("func_2申请了lock_2.....") time.sleep(4) print("func_2等待lock_1.......") lock_1.acquire() print("func_2申请了lock_1.....") lock_1.release() print("func_2 释放了 lock_1") lock_2.release() print("func_2 释放了 lock_2") print("func_2 done") if __name__ == "__main__": t1 = threading.Thread(target=func_1,args=()) t2 = threading.Thread(target=func_2,args=()) t1.start() t2.start() t1.join() t2.join()
2.解决方式
我们加入判断语句,对申请不到的锁就不申请了,直接走下去
关注里面的rst = lock_4.acquire(timeout=-1)#可见这是一个返回值是布尔类型的变量,timeout代表超时跳
lock_3 = threading.Lock() lock_4 = threading.Lock() def func_3(): print("func_3 starting.....") lock_3.acquire(timeout=-1) print("func_3 申请了lock_3.....") time.sleep(2) print("func_3 等待lock_4.......") rst = lock_4.acquire(timeout=-1)#可见这是一个返回值是布尔类型的变量,timeout代表超时跳出 if rst: print("func_3的带了锁lock_4") lock_4.release() print("func_3释放了lock_4") else: print("func_3没申请到lock_4") lock_3.release() print("func_3释放了lock_3") print("func_3 done......") def func_4(): print("func_4 starting.....") lock_4.acquire(timeout=4) print("func_4 申请了lock_4.....") time.sleep(2) print("func_4 等待lock_3.......") rst = lock_3.acquire(timeout=2) if rst: print("func_3得到了了锁lock_3") lock_3.release() print("func_4释放了lock_3") else: print("func_4没申请到lock_3") lock_4.release() print("func_4释放了lock_4") print("func_4 done......") if __name__ == "__main__": t3 = threading.Thread(target=func_3,args=()) t4 = threading.Thread(target=func_4,args=()) t3.start() t4.start() t3.join() t4.join()
解决了冲突,但是实际上没有解决这个死锁问题,但是这已经足够,本就应该避免出现这种问题
二、源码
d25_3_dead_lock.py
https://github.com/ruigege66/Python_learning/blob/master/d25_3_dead_lock.py
2.CSDN:https://blog.csdn.net/weixin_44630050(心悦君兮君不知-睿)
3.博客园:https://www.cnblogs.com/ruigege0000/
4.欢迎关注微信公众号:傅里叶变换,后台回复”礼包“,获取大数据学习资料
Python连载35-死锁问题以及解决方式的更多相关文章
- python——报错ImportError:DLL load failed with error code -1073741795的解决方式
python中导入一个包,import cv2总是报错'ImportError:DLL load failed with error code -1073741795',报错形式: 网上找了好久的解决 ...
- 【python系列】python画报表(Chartkick、Flask)(附中文乱码解决方式)
chartkick 能够画 javascript 报表, 并且比較美观.可是网上搜了下.非常难找到 python 版本号的,于是查了些资料,摸索了下. 对 Flask 也不非常熟悉,这里就仅仅抛砖引玉 ...
- NAT的全然分析及其UDP穿透的全然解决方式
NAT的全然分析及其UDP穿透的全然解决方式 一:基本术语 防火墙 防火墙限制了私网与公网的通信,它主要是将(防火墙)觉得未经授权的的包丢弃,防火墙仅仅是检验包的数据,并不改动数据包中的IP地址和 ...
- ubuntu下编译时遇到的错误及解决方式
1.错误展示: hangma@ubuntu:~/test/test/protest/stack_test$ gcc -c my_stack.c -o my_stack.o In file inclu ...
- 转:python idle 清屏问题的解决
http://www.cnblogs.com/maybego/p/3234055.html python idle 清屏问题的解决 在学习和使用python的过程中,少不了要与python idle打 ...
- python输出htmltestrunner中文乱码如何解决
python unittest要产生一个可看的报告,需要借助一个第三方的包 下载HTMLTestRunner.py 第三方库 ,参考地址: http://tungwaiyip.info/softwar ...
- Circular dependency issuse on cocoapods version(0.36.0) 全然解决方式(非降版本号)
此前的文章中.以前提到在cocoapods依赖管理版本号假设超过0.34.4.比方0.35, 0.36.0等版本号中. 运行"pod install" 或者 "pod u ...
- 通过py2exe打包python程序的过程中,解决的一系列问题
py2exe的使用方法参考<py2exe使用方法>. 注:程序可以在解释器中正常运行,一切问题都出在打包过程中. 问题1: 现象:RuntimeError: maximum recursi ...
- mixare的measureText方法在频繁调用时抛出“referencetable overflow max 1024”的解决方式
这几天在搞基于位置的AR应用,採用了github上两款开源项目: mixare android-argument-reality-framework 这两个项目实现机制大致同样.我选取的是androi ...
随机推荐
- 动态规划_Cow Bowling_POJ-3176
The cows don't use actual bowling balls when they go bowling. They each take a number (in the range ...
- CSS布局定位基础-盒模型和定位机制
1. 盒模型 2. 外边距合并 3. 定位机制 4. Float 5. Position:属性有哪些取值,它们的行为是什么? 无依赖绝对定位? 6. Display:常见属性值有哪些取值? 7. 对B ...
- 一、PyTorch 入门实战—Tensor(转)
目录 一.Tensor的创建和使用 二.Tensor放到GPU上执行 三.Tensor总结 一.Tensor的创建和使用 1.概念和TensorFlow的是基本一致的,只是代码编写格式的不同.我们声明 ...
- webapck小知识点1
全局安装webpack webpack-cli npm install webapck webpack-cli -g 卸载全局安装的webpack webpack-cli npm unistall w ...
- 【iOS】Your account already has a valid ios
打包内测的时候遇到了这个问题,如图所示: 官网解决办法: If the certificate already exists in Member Center, a “Your account alr ...
- LeetCode :1.两数之和 解题报告及算法优化思路
最近开始重拾算法,在 LeetCode上刷题.顺便也记录下解题报告以及优化思路. 题目链接:1.两数之和 题意 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 ...
- 在Java大环境下.NET程序员如何夺得一线生机
先来看一组数据,从某招聘网站直接检索3-4w的岗位,会看到Java与.NET社会需求量的巨大差异,这里就不再对比高薪的岗位了,.NET的高薪岗位更是少的可怜: 笔者从业十余年,一直是在.NET圈子 ...
- Spring Cloud 之 Stream.
一.简介 Spring Cloud Stream 是一个用来为微服务应用构建消息驱动能力的框架. Spring Cloud Stream 为一些供应商的消息中间件产品(目前集成了 RabbitMQ 和 ...
- restapi(4)- rest-mongo : MongoDB数据库前端的httpserver
完成了一套标准的rest风格数据库CRUD操作httpserver后发现有许多不足.主要是为了追求“通用”两个字,想把所有服务接口做的更“范generic”些,结果反而限制了目标数据库的特点,最终产生 ...
- unity 四叉树管理场景
当场景元素过多时,需要实时的显示及隐藏物体使得性能提示,但是物体那么多,怎么知道哪些物体需要显示,哪些物体不需要显示的.当然,遍历物体判断该物体是否可以显示是最容易想到的方法,但是每次更新要遍历所有物 ...