• python 死锁


     1 """
     2 死锁
     3 要AB两个锁
     4 当A锁内部需要使用B锁,同时B锁内部需要使用A锁的时候,就要可能会出现死锁
     5 
     6 出现死所的解决方法:
     7 1.重构代码
     8 2.添加timeout时间
     9 
    10 下面代码中要可能返回下面内容,在同时认为锁被对方占用,同时释放
    11 Thread-1获取到a锁
    12 Thread-2获取到b锁
    13 over
    14 
    15 """
    16 import time
    17 from threading import Thread, Lock
    18 
    19 lock_a = Lock()
    20 lock_b = Lock()
    21 
    22 
    23 class MyThread(Thread):
    24     def run(self) -> None:
    25         if lock_a.acquire():  # 如果a锁可以获取到,返回True,获取不到就阻塞
    26             print(self.name + "获取到a锁")
    27             time.sleep(0.1)
    28             if lock_b.acquire(timeout=0.01):  # 这里不加退出时间就会要可能出现死锁
    29                 print(self.name + "获取到b锁,现有ab锁")
    30                 lock_b.release()
    31             lock_a.release()
    32 
    33 
    34 class MyThread1(Thread):
    35     def run(self) -> None:
    36         if lock_b.acquire():  # 如果b锁可以获取到,返回True,获取不到就阻塞
    37             print(self.name + "获取到b锁")
    38             time.sleep(0.1)
    39             if lock_a.acquire(timeout=0.01):  # 这里不加退出时间就会要可能出现死锁
    40                 print(self.name + "获取到a锁,现有ab锁")
    41                 lock_a.release()
    42             lock_b.release()
    43 
    44 
    45 if __name__ == '__main__':
    46     t1 = MyThread()
    47     t2 = MyThread1()
    48 
    49     t1.start()
    50     t2.start()
    51     t1.join()
    52     t2.join()
    53 
    54     print("over")
  • 相关阅读:
    观察者模式股票提醒
    中介者模式虚拟聊天室
    模板方法模式数据库的连接
    职责链模式财务审批
    期末总结
    软件需求分析考试
    tomcat启动极其慢的解决方法困扰我一年多的问题终于解决
    状态模式银行账户
    解释器模式
    动态加载JS文件提升访问网站速度
  • 原文地址:https://www.cnblogs.com/cfpl/p/12996549.html
Copyright © 2020-2023  润新知