python学习笔记-死锁与递归锁(可重入锁)

本文为了说明例子,用中文作为变量写在了程序里面,一般编程最好不要那么写

死锁

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

递归锁(可重入锁)

可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反,不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。

代码实现

from threading import Thread, Lock, RLock
import time



mutexA = mutexB = RLock()




class 对付工贼(Thread):# 类只要加括号多次 产生的肯定是不同的对象 如果你想要实现多次加括号等到的是相同的对象那么就要参考单例模式
    def run(self):
        self.工人A()
        self.工人B()

    def 工人A(self):
        mutexA.acquire()#上锁
        print('%s 抢到A狼牙棒'% self.name)  # 获取当前线程名
        mutexB.acquire()
        print('%s 抢到B狼牙棒'% self.name)
        mutexB.release()#释放锁
        mutexA.release()

    def 工人B(self):
        mutexB.acquire()
        print('%s 抢到B狼牙棒'% self.name)
        time.sleep(2)
        mutexA.acquire()
        print('%s 抢到A狼牙棒'% self.name)
        mutexA.release()
        mutexB.release()


if __name__ == '__main__':
    for i in range(10):
        t = 对付工贼()
        t.start()

效果
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

丰。。

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

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

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

打赏作者

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

抵扣说明:

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

余额充值