在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁。

尽管死锁很少发生,但一旦发生就会造成应用的停止响应。下面看一个死锁的例子

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中的死锁相关推荐

  1. python中解决死锁的方法

    1.添加超时时间: fromthreading import Thread, Lock importtime mutex1= Lock()  # 创建一个互斥锁 mutex2= Lock()  # 创 ...

  2. python中的多线程 GIL(全局解释器锁) 死锁与递归锁

    1.什么的是线程 在程序里一个执行路线就叫做线程,线程是程序执行的最小单位 2.多线程的优点 使用线程可以把占据长时间的程序中的任务放到后台去处理. 在处理I/O密集程序的运行速度可能加快(ps:计算 ...

  3. python中的subprocess.Popen()使用详解---以及注意的问题(死锁)

    从python2.4版本开始,可以用subprocess这个模块来产生子进程,并连接到子进程的标准输入/输出/错误中去,还可以得到子进程的返回值. subprocess意在替代其他几个老的模块或者函数 ...

  4. Python 中的进程、线程、协程、同步、异步、回调(一)

    在进一步之前,让我们先回顾一下各种上下文切换技术. 不过首先说明一点术语.当我们说"上下文"的时候,指的是程序在执行中的一个状态.通常我们会用调用栈来表示这个状态--栈记载了每个调 ...

  5. python中gil锁和线程锁_Python线程——GIL锁、线程锁(互斥锁)、递归锁(RLock)...

    GIL锁 ​ 计算机有4核,代表着同一时间,可以干4个任务.如果单核cpu的话,我启动10个线程,我看上去也是并发的,因为是执行了上下文的切换,让看上去是并发的.但是单核永远肯定时串行的,它肯定是串行 ...

  6. python中并发编程基础1

    并发编程基础概念 1.进程. 什么是进程? 正在运行的程序就是进程.程序只是代码. 什么是多道? 多道技术: 1.空间上的复用(内存).将内存分为几个部分,每个部分放入一个程序,这样同一时间在内存中就 ...

  7. python中的多进程与多线程(二)

    1.使用多线程可以有效利用CPU资源,线程享有相同的地址空间和内存,这些线程如果同时读写变量,导致互相干扰,就会产生并发问题,为了避免并发问题,绝不能让多个线程读取或写入相同的变量,因此python中 ...

  8. 互斥锁在python中的应用

    互斥锁的背景意义 我们知道在一个进程底下的多个线程是可以共享全局变量的,但是有时候这样会造成很多的问题,有可能两个或多个线程在某一时刻抢到了全局变量,这时候一起执行可能会让数据出错,此时,我们引出了互 ...

  9. Python中的线程间通信

    Python中的线程间通信 文章目录 Python中的线程间通信 1.Queue 2.同步机制 1.Event 2.Semaphore(信号量) 3.Lock(锁) 4.RLock(可重入锁) 5.C ...

最新文章

  1. ssh项目放到服务器上出现404,项目运行一段时间,后台程序无法启动,404错误
  2. Codeup-问题 A: 【字符串】最长回文子串
  3. java getClass()
  4. L3-020 至多删三个字符 [DP]
  5. 前端学习(3218):批量传递props
  6. android 线性布局蒙层,Android开发 - 掌握ConstraintLayout(一)传统布局的问题
  7. ​使用高斯过程回归指导网络轻量化
  8. 每秒处理10万订单的支付架构
  9. python零基础自学教材-零基础的小白怎么学python?
  10. GNOME 3.20 两大新特性说明
  11. Ubuntu18.04安装COMSOL 5.3a
  12. Java单例模式的双if
  13. mfc使用matlab绘图,mfc调用matlab绘图
  14. 【转】敏捷中国十八年目睹之怪现状
  15. 密码的自动生成器:密码由大写字母/小写字母/数字组成,生成12位随机密码
  16. db2去除字段值的空格_DB2表数据中存在空格问题解决办法
  17. Please don't stop rua 233333
  18. OpenGL---GLUT教程(四) GLUT动画
  19. App产品原型背后要交代的细节和要理解的原则(上)
  20. 最新开发的小工具,配合“T-mold”使用,效果更佳!

热门文章

  1. UVA 213 Message Decoding
  2. LeetCode:二进制手表【401】
  3. NHibernate之旅(4):探索查询之条件查询(Criteria Query)
  4. Linux下编译安装openssl
  5. 转盘脚本编辑器学习1
  6. Hibernate_2_Hibernate中对象状态及转化_一级缓存_Session详解_HQL/SQL/Criteria_一对多关系_级联操作
  7. logistic模型原理与推导过程分析(2)
  8. matlab中计算不等式的解,大神们,求个解多元一次不等式的代码,要所有整数解...
  9. 神经网络用python还是matlab_Matlab与神经网络学习笔记
  10. AntDesign组件库的使用