线程死锁问题以及递归锁解法

from threading import Thread, Lock, RLock
import time

mutexA = Lock()
muteXB = Lock()
'''
# 将上述的
mutexA = Lock()
mutexB = Lock()
# 换成
mutexA = mutexB = RLock() # 递归锁 可解决本例的死锁问题
'''


class MyThead(Thread): def run(self) -> None: self.func1() self.func2() def func1(self): mutexA.acquire() print('%s 抢到A锁'%self.name) # 获取当前线程名 muteXB.acquire() print('%s 抢到B锁'%self.name) muteXB.release() mutexA.release() def func2(self): muteXB.acquire() print('%s 抢到B锁' % self.name) time.sleep(2) mutexA.acquire() print('%s 抢到A锁' % self.name) mutexA.release() muteXB.release() ''' Thread-1 抢到A锁 Thread-1 抢到B锁 Thread-1 抢到B锁 Thread-2 抢到A锁 线程1接下来要抢A锁,但A锁在线程2那里 线程2接下来要抢B锁,但B锁在线程1那里 形成死锁 ''' if __name__ == '__main__': for i in range(10): t = MyThead() t.start()

 

posted @ 2023-03-12 14:24  palx  阅读(23)  评论(0编辑  收藏  举报