一、 互斥锁(Lock)与递归锁(RLock)机制
1.1 由互斥锁(Lock)产生的死锁现象:
# 互斥锁(死锁现象): # 死锁现象: from threading import Lock lock = Lock() lock.acquire() print(123) lock.acquire() # 等待获取锁(死锁状态) print(456) lock.release() # 等待释放锁 lock.release() print('程序结束!!!') # 科学家吃面产生的死锁现象: from threading import Lock, Thread import time noodle_lock = Lock() # 面条锁 fork_lock = Lock() # 叉子锁 def eat1(name): noodle_lock.acquire() time.sleep(0.5) print('%s拿到面了' % name) fork_lock.acquire() print('%s拿到叉子了' % name) print('%s吃面' % name) fork_lock.release() print('%s放下叉子了' % name) noodle_lock.release() print('%s放下面了' % name) def eat2(name): fork_lock.acquire() print('%s拿到叉子了' % name) noodle_lock.acquire() print('%s拿到面了' % name) print('%s吃面' % name) noodle_lock.release() print('%s放下面了' % name) fork_lock.release() print('%s放下叉子了' % name) # 三个线程(科学家)需同时获取叉子和面条才能吃到面条 Thread(target=eat1, args=('Annie',)).start() Thread(target=eat2, args=('Lisa',)).start() Thread(target=eat1, args=('Jane',)).start()