`

python 死锁

 
阅读更多

import threading ,time

"""

当两个或者更多的线程在等待资源的时候就会产生死锁,两个线程相互等待。

在这里 thread1 等待thread2释放block , thread2等待thtead1释放ablock,

 

 

避免死锁的原则:

1. 一定要以一个固定的顺序来取得锁,这个列子中,意味着首先要取得alock, 然后再去block

2. 一定要按照与取得锁相反的顺序释放锁,这里,应该先释放block,然后是alock

"""

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直观的演示一下。 死锁的一个原因是互斥锁。假设银行系统中,用户a试图转账100块给用户b,与此同时用户b试图转账200块给用户...

    浅谈python锁与死锁问题

    如果你学过操作系统,那么对于锁应该不陌生。锁的含义是线程锁,可以用来指定某一个逻辑或者是资源同一时刻只能有一个线程访问。这个很好理解,就好像是有一个房间被一把锁锁住了,只有拿到钥匙的人才能进入。...

    Python 防止死锁的方法

    主要介绍了Python 防止死锁的方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下

    c#多线程中用pythonnet库调用Python的方法死锁的源代码

    c#多线程中用pythonnet库调用Python的方法死锁的源代码 参考csdn博客:https://blog.csdn.net/qiangpi6057/article/details/135076348

    python避免死锁方法实例分析

    主要介绍了python避免死锁方法,较为详细的分析了死锁的成因与避免形成死锁的方法,需要的朋友可以参考下

    python 多线程死锁问题的解决方案

    主要介绍了python 多线程死锁问题的解决方案,帮助大家更好的理解和学习python 锁,感兴趣的朋友可以了解下

    c#多线程中用pythonnet库调用Python的方法解决死锁问题的源代码

    c#多线程中用pythonnet库调用Python的方法解决死锁问题的源代码 参考csdn博客:https://blog.csdn.net/qiangpi6057/article/details/135076348

    进程线程及死锁

    通过观察、分析实验现象,深入理解线程及线程在调度执行和内存空间等方面的特点,并掌握线程与进程的区别。

    postgresql查询死锁以及杀死死锁进程sql.txt

    查询sql的死锁进程,查找并杀死。解决生产数据库中卡死的现象。postgresql查询死锁以及杀死死锁进程sql

    利用Python+Java调用Shell脚本时的死锁陷阱详解

    主要给大家介绍了关于利用Python+Java调用Shell脚本时的死锁陷阱的相关资料,文章通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

    举例讲解Python中的死锁、可重入锁和互斥锁

    简单来说,死锁是一个资源被多次调用,而多次调用方都未能释放该资源就会造成死锁,这里结合例子说明下两种常见的死锁情况。 1、迭代死锁 该情况是一个线程“迭代”请求同一个资源,直接就会造成死锁: import ...

    Python自学教程-12-死锁.ev4.rar

    Python自学教程-12-死锁.ev4.rar

    Python多线程编程(五):死锁的形成

    前一篇文章Python:使用threading模块实现多线程编程四[使用Lock互斥锁]我们已经开始涉及到如何使用互斥锁来保护我们的公共资源了,现在考虑下面的情况– 如果有多个公共资源,在线程间共享多个资源的时候,如果两个...

    死锁的检测的Python实现 (操作系统课程设计作业代码)

    网络上大多死锁检测的代码多为C语言,且没有注释补充。...本代码参考王道考研操作系统视频课程中的死锁检测算法,进行了Python的实现(含注释)。 为保小命,该资源不含任何文档,仅有含注释的代码,请谨慎考虑下载。

    Python七大类常见问题详解.rar

    Python七大类常见深度问题详解: Python类三种方法,函数传参,类与实例变量(一) Python迭代器生成器,私有变量及推导式(二) Python装饰器AOP 不定长参数 鸭子类型 重载...Python 调度算法 死锁 静动态链接 分页分段(七)

    Python全栈开放实战教程

    Python全栈开发实战教程简介 Python全栈开发实战教程是一本专为初学者设计的教程,适合想要入门Python开发和实战的读者。...第七章 并发编程:包括线程,进程,死锁、进程池和线程池、互斥锁以及协程等

Global site tag (gtag.js) - Google Analytics