• 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锁
    相互等待,两个线程都无法继续执行 
     
     
     
     
     
     
     
     
     
     
     
     
     

  • 相关阅读:
    Asp.Net2.0中的缓存
    webpartzone无法显示最小化和关闭按钮?
    TransactionScope分布式事务和非分布式事务
    JS获取GET参数的两种方法
    js 文件上传下载功能
    android动态设置布局LayoutInflater的使用详解
    Eclipse大括号换行显示
    Java强引用、 软引用、 弱引用、虚引用(转载)
    Android扭曲图像(水面落叶壁纸初步实现)
    win7系统自带的屏幕录制软件
  • 原文地址:https://www.cnblogs.com/sea-stream/p/14192200.html
Copyright © 2020-2023  润新知