美文网首页
python中的死锁

python中的死锁

作者: __XY__ | 来源:发表于2018-08-23 15:32 被阅读0次

死锁概念

在多道程序系统中,由于多个进程的并发执行,改善了系统资源的利用率并提高了系统的处理能力。然而,多个进程的并发执行也带来了新的问题——死锁。所谓死锁是指多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程都将无法向前推进。

代码示意

from threading import Thread,Lock
import time
mutexA=Lock()
mutexB=Lock()

class MyThread(Thread):
    def run(self):
        self.func1()
        self.func2()
    def func1(self):
        mutexA.acquire()
        print('\033[41m%s 拿到A锁\033[0m' %self.name)

        mutexB.acquire()
        print('\033[42m%s 拿到B锁\033[0m' %self.name)
        mutexB.release()

        mutexA.release()

    def func2(self):
        mutexB.acquire()
        print('\033[43m%s 拿到B锁\033[0m' %self.name)
        time.sleep(2)

        mutexA.acquire()
        print('\033[44m%s 拿到A锁\033[0m' %self.name)
        mutexA.release()

        mutexB.release()

if __name__ == '__main__':
    for i in range(5):
        t=MyThread()
        t.start()

代码注释

输出结果为

Thread-1 拿到A锁
Thread-1 拿到B锁
Thread-1 拿到B锁
Thread-2 拿到A锁

线程1 先开始执行func1,分布拿到AB锁,然后释放
线程1 先执行func2,先拿到了B锁,开始sleep
线程2 先拿到了A锁
这时候形成了僵局,线程2想要线程1手里的B锁,线程1想要线程2里的A锁。

mysql的死锁

pass

相关文章

  • python中的死锁

    死锁概念 在多道程序系统中,由于多个进程的并发执行,改善了系统资源的利用率并提高了系统的处理能力。然而,多个进程的...

  • Python中的各种锁

    Python之死锁 死锁分为两种情况,多进程/线程的死锁.或者是单线程的死锁. 1.首先看一下单线程的死锁,单线程...

  • Python 中死锁问题定位

    大致思路: python 运行过程中会产生调用栈,当线程死锁时,栈信息就会停留在线程死锁的那一刻,通过查看此时的栈...

  • 死锁

    在JAVA编程中,有3种典型的死锁类型: 静态的锁顺序死锁 动态的锁顺序死锁 协作对象之间发生的死锁 静态的锁顺序...

  • Python锁机制相关问题解决方案

    一、如何避免死锁 当两个线程同时等待对方释放资源时,就出现了死锁。Python解释器没有监测,也不会主动采取措施处...

  • Java死锁检测之ThreadMXBean

    看此文章前请先了解之前一篇文章 "Java死锁之理解死锁" 中的死锁示例java 中提供了可以检测死锁的工具类Th...

  • 死锁

    在实际编程中,死锁虽然不常见,但是如果遇到死锁便是致命的。接下来了解一下《操作系统》对于死锁产生条件的描述。 死锁...

  • Android死锁的场景有哪些?

    常见的死锁的场景 下面分析几种常见的死锁形式: 锁顺序死锁 上述代码中,如果一个线程调用lockAtoB(),另一...

  • java大厂面试题整理(六)JVM常用命令和参数

    关于JVM的面试题由死锁引出。 死锁及定位 从宏观上死锁产生的原因:死锁是指两个或两个以上的进程在执行过程中,因争...

  • Java中的死锁

    定义两个或者两个以上的线程在执行的过程中,因资源竞争造成的相互等待,无法继续执行下去。 造成死锁的原因系统资源的竞...

网友评论

      本文标题:python中的死锁

      本文链接:https://www.haomeiwen.com/subject/hoqmiftx.html