python避免死锁方法实例分析

yipeiwu_com5年前Python基础

本文实例讲述了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快速制作可视化报表的方法

使用Python快速制作可视化报表的方法

我们可以试用可视化包——Pyechart。 Echarts是百度开源的一个数据可视化JS库,主要用于数据可视化。 pyecharts是一个用于生成Echarts图标的类库。实际就是Ech...

分析Python编程时利用wxPython来支持多线程的方法

如果你经常使用python开发GUI程序的话,那么就知道,有时你需要很长时间来执行一个任务。当然,如果你使用命令行程序来做的话,你回非常惊讶。大部分情况下,这会堵塞GUI的事件循环,用户...

python列表生成器迭代器实例解析

这篇文章主要介绍了python列表生成器迭代器实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 列表生成式 例如 有一个列表...

Django ModelForm组件使用方法详解

Django ModelForm组件使用方法详解

一、创建ModelForm from django.forms import ModelForm from appxx import models from django.form...

python实现删除列表中某个元素的3种方法

python中关于删除list中的某个元素,一般有三种方法:remove、pop、del: 1.remove: 删除单个元素,删除首个符合条件的元素,按值删除 举例说明: >...