python中的死锁
在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁。
尽管死锁很少发生,但一旦发生就会造成应用的停止响应。下面看一个死锁的例子
from threading import Thread, Lock
import time
mutex1= Lock() # 创建一个互斥锁
mutex2= Lock() # 创建一个互斥锁
def fun1():
mutex1.acquire()
print("线程1 锁住了mutex1")
time.sleep(0.1)
mutex2.acquire()
print("线程1 锁住了mutex2")
print("线程1 hello")
mutex1.release()
mutex2.release()
def fun2():
mutex2.acquire()
print("线程2 锁住了mutex2")
time.sleep(0.1)
mutex1.acquire()
print("线程2 锁住了mutex1")
print("线程2 hi")
mutex1.release()
mutex2.release()
t1 =Thread(target=fun1) # 创建一个线程对象
t2 =Thread(target=fun2) # 创建一个线程对象
t1.start() # 开启线程的执行
t2.start()
t1.join() # 回收线程资源
t2.join()
python中的死锁相关推荐
- python中解决死锁的方法
1.添加超时时间: fromthreading import Thread, Lock importtime mutex1= Lock() # 创建一个互斥锁 mutex2= Lock() # 创 ...
- python中的多线程 GIL(全局解释器锁) 死锁与递归锁
1.什么的是线程 在程序里一个执行路线就叫做线程,线程是程序执行的最小单位 2.多线程的优点 使用线程可以把占据长时间的程序中的任务放到后台去处理. 在处理I/O密集程序的运行速度可能加快(ps:计算 ...
- python中的subprocess.Popen()使用详解---以及注意的问题(死锁)
从python2.4版本开始,可以用subprocess这个模块来产生子进程,并连接到子进程的标准输入/输出/错误中去,还可以得到子进程的返回值. subprocess意在替代其他几个老的模块或者函数 ...
- Python 中的进程、线程、协程、同步、异步、回调(一)
在进一步之前,让我们先回顾一下各种上下文切换技术. 不过首先说明一点术语.当我们说"上下文"的时候,指的是程序在执行中的一个状态.通常我们会用调用栈来表示这个状态--栈记载了每个调 ...
- python中gil锁和线程锁_Python线程——GIL锁、线程锁(互斥锁)、递归锁(RLock)...
GIL锁 计算机有4核,代表着同一时间,可以干4个任务.如果单核cpu的话,我启动10个线程,我看上去也是并发的,因为是执行了上下文的切换,让看上去是并发的.但是单核永远肯定时串行的,它肯定是串行 ...
- python中并发编程基础1
并发编程基础概念 1.进程. 什么是进程? 正在运行的程序就是进程.程序只是代码. 什么是多道? 多道技术: 1.空间上的复用(内存).将内存分为几个部分,每个部分放入一个程序,这样同一时间在内存中就 ...
- python中的多进程与多线程(二)
1.使用多线程可以有效利用CPU资源,线程享有相同的地址空间和内存,这些线程如果同时读写变量,导致互相干扰,就会产生并发问题,为了避免并发问题,绝不能让多个线程读取或写入相同的变量,因此python中 ...
- 互斥锁在python中的应用
互斥锁的背景意义 我们知道在一个进程底下的多个线程是可以共享全局变量的,但是有时候这样会造成很多的问题,有可能两个或多个线程在某一时刻抢到了全局变量,这时候一起执行可能会让数据出错,此时,我们引出了互 ...
- Python中的线程间通信
Python中的线程间通信 文章目录 Python中的线程间通信 1.Queue 2.同步机制 1.Event 2.Semaphore(信号量) 3.Lock(锁) 4.RLock(可重入锁) 5.C ...
最新文章
- ssh项目放到服务器上出现404,项目运行一段时间,后台程序无法启动,404错误
- Codeup-问题 A: 【字符串】最长回文子串
- java getClass()
- L3-020 至多删三个字符 [DP]
- 前端学习(3218):批量传递props
- android 线性布局蒙层,Android开发 - 掌握ConstraintLayout(一)传统布局的问题
- ​使用高斯过程回归指导网络轻量化
- 每秒处理10万订单的支付架构
- python零基础自学教材-零基础的小白怎么学python?
- GNOME 3.20 两大新特性说明
- Ubuntu18.04安装COMSOL 5.3a
- Java单例模式的双if
- mfc使用matlab绘图,mfc调用matlab绘图
- 【转】敏捷中国十八年目睹之怪现状
- 密码的自动生成器:密码由大写字母/小写字母/数字组成,生成12位随机密码
- db2去除字段值的空格_DB2表数据中存在空格问题解决办法
- Please don't stop rua 233333
- OpenGL---GLUT教程(四) GLUT动画
- App产品原型背后要交代的细节和要理解的原则(上)
- 最新开发的小工具,配合“T-mold”使用,效果更佳!
热门文章
- UVA 213 Message Decoding
- LeetCode:二进制手表【401】
- NHibernate之旅(4):探索查询之条件查询(Criteria Query)
- Linux下编译安装openssl
- 转盘脚本编辑器学习1
- Hibernate_2_Hibernate中对象状态及转化_一级缓存_Session详解_HQL/SQL/Criteria_一对多关系_级联操作
- logistic模型原理与推导过程分析(2)
- matlab中计算不等式的解,大神们,求个解多元一次不等式的代码,要所有整数解...
- 神经网络用python还是matlab_Matlab与神经网络学习笔记
- AntDesign组件库的使用