zoukankan      html  css  js  c++  java
  • 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")
  • 相关阅读:
    linux常用服务安装部署
    linux系统基础优化及常用命令
    linux文档和目录结构
    【BZOJ2510】弱题
    【BZOJ3495】PA2010 Riddle
    算法笔记——2-SAT
    路面修整的题解
    三角形的题解
    流星雨的题解
    计算的题解
  • 原文地址:https://www.cnblogs.com/cfpl/p/12996549.html
Copyright © 2011-2022 走看看