一、 互斥锁(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()
View Code

相关文章: