死锁:指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

  此程序的两个线程会因为互相等待对方的互斥锁而陷入等待,最后由于主线程执行完毕而结束了各个子线程,从而程序结束。

 import threading
import time class MyThread1(threading.Thread):
def run(self):
#对mutexA上锁
mutexA.acquire() #mutexA上锁,延时1秒,等待另外那个线程,把mutexB上锁
print(self.name+'----do1---up----')
time.sleep(1) #此时会堵塞,因为这个mutexA已经被另外的线程抢先上锁了
mutexB.acquire()
print(self.name+'----do2---down----')
mutexB.release() #对mutexA解锁
mutexA.release() class MyThread2(threading.Thread):
def run(self):
#对mutexA上锁
mutexB.acquire() #mutexA上锁,延时1秒,等待另外那个线程,把mutexB上锁
print(self.name+'----do1---up----')
time.sleep(1) #此时会堵塞,因为这个mutexA已经被另外的线程抢先上锁了
mutexA.acquire()
print(self.name+'----do2---down----')
mutexA.release() #对mutexB解锁
mutexB.release() if __name__=='__main__':
mutexA=threading.Lock()
mutexB=threading.Lock()
t1=MyThread1()
t2=MyThread2()
t1.start()
t2.start()

避免死锁的方法:1.添加超时时间 2.各类算法

最新文章

  1. bootstrap双日历插件实例化
  2. 利用HTML和JS制作隔行换背景颜色的表格
  3. ZOJ Problem Set - 3329 One Person Game
  4. 编译linux内核问题
  5. 为SharePoint网站创建自定义导航菜单
  6. J - Air Raid - hdu 1151(最小边覆盖)
  7. 七个你无法忽视的Git使用技巧(转)
  8. list、dict、tuple的一些小操作总结
  9. php 缓存之 APC 和apcu
  10. C++ Concept 和Java 接口
  11. 09 ExpanableListView 的代码例子
  12. Centos6系列Bond配置方法
  13. Grid move
  14. Java课程----自我介绍
  15. 实现硬件PWM控制电机旋转和通过编码器计算所转圈数的简单例程
  16. Multi-Model多模数据库引擎设计与实现
  17. html5移动端查找
  18. 为什么今天的L4无人驾驶无法到达终局(转)
  19. spark 源码阅读博客
  20. pip使用国内镜像源

热门文章

  1. MySQL数据库:数据的概念
  2. 一个版本烧录过程中记录:fdisk、mkfs.ext4、make_ext4fs、img2simg、simg2img
  3. 【转载】C++编译过程
  4. jira添加工作流
  5. Codeforces Round #601 (Div. 2)
  6. jsp连接mysql出现不支持认证协议的解决办法
  7. vue自定义指令笔记
  8. react+dva 全局model中异步获取数据state在组件中取不到值
  9. IT人的立功,立言,立德三不朽
  10. HTML5新属性在Google浏览器中不能显示的问题