zoukankan      html  css  js  c++  java
  • python3 线程死锁

    所谓死锁:是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程,如下就是死锁
    code
    from threading import Thread,Lock
    import time
    
    mutexA=Lock()
    mutexB=Lock()
    
    class MyThread(Thread):
        def run(self):
            self.func1()
            self.func2()
    
        def func1(self):
            mutexA.acquire()
            print('33[41m%s 拿到A锁33[0m' %self.name)
    
            mutexB.acquire()
            print('33[42m%s 拿到B锁33[0m' %self.name)
            mutexB.release()
            print('33[42m%s 解B锁33[0m' %self.name)
    
            mutexA.release()
            print('33[42m%s 解A锁33[0m' %self.name)
    
        def func2(self):
            mutexB.acquire()
            print('33[43m%s 拿到B锁33[0m' %self.name)
            time.sleep(2)
    
            mutexA.acquire()
            print('33[44m%s 拿到A锁33[0m' %self.name)
            mutexA.release()
            print('33[42m%s 解A锁33[0m' %self.name)
    
            mutexB.release()
            print('33[42m%s 解B锁33[0m' %self.name)
    
    if __name__ == '__main__':
        for i in range(10):
            t=MyThread()
            t.start()

    outputs
    macname@MacdeMacBook-Pro py % python3 cccccc.py
    Thread-1 拿到A锁
    Thread-1 拿到B锁
    Thread-1 解B锁
    Thread-1 解A锁
    Thread-1 拿到B锁
    Thread-2 拿到A锁
    ^CException ignored in: <module 'threading' from '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/threading.py'>
    Traceback (most recent call last):
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/threading.py", line 1308, in _shutdown
        lock.acquire()
    KeyboardInterrupt
    macname@MacdeMacBook-Pro py %
    线程1拿到A以及B后,再次释放
    接下来,由于线程2抢到了A锁,线程1抢到了B锁
    相互等待,两个线程都无法继续执行 
     
     
     
     
     
     
     
     
     
     
     
     
     

  • 相关阅读:
    Java通过 Scanner 类来获取用户的输入
    Java中的Calendar 类和SimpleDateFormat 类
    JAVA中字符串常见操作
    JAVA中数组Arrays类的常见用法
    Java中的compareTo()方法,compareToIgnoreCase()方法
    python常见字符串操作
    linux常见配置文件路径
    python的匿名函数
    python列表解析式,字典解析式,集合解析式和生成器
    Django admin
  • 原文地址:https://www.cnblogs.com/sea-stream/p/14192200.html
Copyright © 2011-2022 走看看