Python 死锁(笔记总结)

#死锁
'''


开发过程中使用线程,在线程间共享多个资源的时候,
如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁。
尽管死锁很少发生,但一旦发生就会造成应用的停止响应,程序不做任何事情。

避免死锁:
解决:
1.重构代码
2.添加超时释放锁
'''

from threading import Thread,Lock
import sys
import time

lockA = Lock()
lockB = Lock()

#自定义线程
class MyThread1(Thread):
    #不论进程还是线程重写的都是run方法
    def run(self):
        if lockA.acquire():#如果可以获取到锁则返回True
            print(self.name +'A锁')
            time.sleep(0.1)
            if lockB.acquire(timeout=3):#在acquire函数中阻塞,一直等待锁,不能往下运行了
                                        #如果加上超时则表示退出acquire,继续往下执行把a锁释放了
                print(self.name +"A锁+B锁")
                lockB.release()
            lockA.release()

#自定义线程
class MyThread2(Thread):
    #不论进程还是线程重写的都是run方法
    def run(self):
        if lockB.acquire():#如果可以获取到锁则返回True
            print(self.name +'B锁')
            time.sleep(0.1)
            if lockA.acquire(timeout=3):
                print(self.name +"A锁+B锁")
                lockA.release()
            lockB.release()


def main():
    pass

if __name__ == "__main__":

#若不加上超时,则会一直不能进入A锁+B锁情况。
#造成线程1,2一直死等
    MyThread1().start()
    MyThread2().start()

    sys.exit(int(main() or 0))
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ou.cs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值