`

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锁与死锁问题

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

    进程线程及死锁

    进程、线程、死锁和POSIX规范的系统调用 进程是操作系统中一个独立的执行单元,它拥有自己的虚拟地址空间和系统资源。线程是轻量级的进程,它共享同一个进程的虚拟地址空间和系统资源。理解进程和线程的概念对于...

    Python 防止死锁的方法

    在Python编程中,死锁是多线程编程中常见的一个问题,它发生在两个或多个线程相互等待对方释放资源,导致所有线程都无法继续执行的情况。本文将深入探讨如何在Python中预防死锁的发生。 首先,我们需要理解死锁的四...

    操作系统中银行家算法详解与Python实现防止死锁

    内容概要:详细介绍了银行家算法的基本原理、算法步骤及其Python实现,旨在通过合理性检查资源分配状态来预防操作系统中的死锁现象,提供了示例数据帮助理解银行家算法的应用方式,并探讨了算法的实际应用场景及优...

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

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

    python避免死锁方法实例分析

    Python中,由于其GIL(全局解释器锁)的存在,虽然单个进程内的线程不会真正意义上的并行运行,但仍然可能发生死锁。为了解决这个问题,我们可以遵循一些原则和策略。 首先,我们需要理解死锁的基本概念。死锁的...

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

    我们将首先了解死锁的基本概念,然后分别讨论Python和Java中如何正确处理子进程的输入输出以防止死锁。 死锁是指两个或多个并发进程各自持有对方需要的资源,无法继续执行的情况。在Python和Java中,当我们调用...

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

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

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

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

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

    在本节Python自学教程中,我们将深入探讨一个关键的并发编程概念——死锁。死锁是多线程或进程交互时可能出现的一种状态,其中两个或多个执行单元相互等待对方释放资源,导致它们都无法继续前进。了解和避免死锁是...

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

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

    C语言与Python实现银行家算法的资源分配与死锁预防机制

    内容概要:本文详细介绍了银行家算法(Banker's Algorithm),这是一种基于银行借贷系统的资源分配与死锁预防算法。文章分别给出了该算法的C语言和Python两种实现方式。具体包括了数据结构定义(如最大需求矩阵、已...

    Python-PythonParallelProgrammingCookbook中文版

    9. **并发编程挑战**:并行编程会引入新的问题,如竞态条件(Race Conditions)、死锁(Deadlocks)和资源饥饿(Starvation)。了解如何避免和解决这些问题至关重要。 通过阅读《Python Parallel Programming ...

    资源分配与死锁预防的银行家算法C语言和Python实现

    内容概要:本文介绍了银行家算法的基本概念及其在防止死锁方面的应用,详细解释了C语言和Python语言下实现银行家算法的方法。主要包含了两个重要部分:一是用于检查系统是否处于安全状态的isSafe函数,二是用于处理...

Global site tag (gtag.js) - Google Analytics