有两个哲学家坐在桌子上,桌子上放了两只筷子,编号分别是a和b,只有同时得到a、b两只筷子时哲学家才能吃饭,如果筷子a被哲学家1号抢到了,筷子b被哲学家2号抢到了,此时两位哲学家都想要得到对方手中的筷子然后去吃一口饭,但是又不肯主动放下自己手中的筷子给对方,此时就进入了漫长的等待对方释放自己想要的“资源”的过程,也就产生了死锁。
import threading
import time
# 创建两个锁
lock_a=threading.Lock()
lock_b=threading.Lock()
def philosopher_a():
for i in range(99):
# 上锁
lock_a.acquire()
print('哲学家a给lock_a加锁,抢到了筷子a')
lock_b.acquire()
print(f'哲学家a给lock_b加锁,抢到了筷子b,ab两只筷子到手,吃第{i+1}口饭')
# 解锁
lock_a.release()
print('哲学家a给lock_a解锁,释放了筷子a')
lock_b.release()
print('哲学家a给lock_b解锁,释放了筷子b')
# time.sleep(0.5)
def philosopher_b():
for i in range(99):
# 上锁
lock_b.acquire()
print('哲学家b给lock_b加锁,抢到了筷子b')
lock_a.acquire()
print(f'哲学家b给lock_a加锁,抢到了筷子a,ab两只筷子到手,吃第{i+1}口饭')
# 解锁
lock_b.release()
print('哲学家b给lock_b解锁,释放了筷子b')
lock_a.release()
print('哲学家b给lock_a解锁,释放了筷子a')
# time.sleep(0.5)
if __name__ == '__main__':
t1=threading.Thread(target=philosopher_a)
t2=threading.Thread(target=philosopher_b)
t1.start()
t2.start()
?
|