python避免死锁方法实例分析

作者:MaxOmnis 时间:2023-08-04 04:32:59 

本文实例讲述了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,死锁
0
投稿

猜你喜欢

  • 使用Python编写简单的画图板程序的示例教程

    2022-04-28 03:22:15
  • Python析构函数__del__定义原理解析

    2023-01-02 15:20:29
  • Flask模板引擎之Jinja2语法介绍

    2021-11-15 21:08:11
  • ASP程序开发注意的安全事项

    2010-05-03 10:55:00
  • mysql中使用sql命令将时间戳解析成datetime类型存入

    2024-01-22 00:00:25
  • 解决使用export_graphviz可视化树报错的问题

    2022-06-10 18:35:59
  • SQL server 2016 安装步骤图文教程

    2024-01-26 07:55:59
  • Python深度学习实战PyQt5布局管理项目示例详解

    2023-03-11 08:47:37
  • JS自定义混合Mixin函数示例

    2024-04-16 10:29:41
  • matplotlib 纵坐标轴显示数据值的实例

    2021-10-02 12:55:43
  • python采用requests库模拟登录和抓取数据的简单示例

    2022-09-21 22:46:55
  • python实现爬取图书封面

    2023-06-08 16:40:44
  • php Exception异常处理详解

    2023-05-29 21:51:37
  • Python中使用HTMLParser解析html实例

    2023-01-17 11:47:16
  • Python selenium使用autoIT上传附件过程详解

    2023-05-23 03:59:13
  • Python-split()函数实例用法讲解

    2023-12-12 07:13:20
  • Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)

    2024-04-16 09:23:29
  • Golang如何交叉编译各个平台的二进制文件详解

    2024-05-22 17:48:47
  • python中input()与raw_input()的区别分析

    2023-02-12 14:08:36
  • 对Python中range()函数和list的比较

    2021-08-26 14:59:47
  • asp之家 网络编程 m.aspxhome.com