栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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()

效果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/321925.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号