Python模拟哲学家进餐问题
有两个哲学家坐在桌⼦上,桌⼦上放了两只筷⼦,编号分别是a和b,只有同时得到a、b两只筷⼦时哲学家才能吃饭,如果筷⼦a被哲学家1号抢到了,筷⼦b被哲学家2号抢到了,此时两位哲学家都想要得到对⽅⼿中的筷⼦然后去吃⼀⼝饭,但是⼜不肯主动放下⾃⼰⼿中的筷⼦给对⽅,此时就进⼊了漫长的等待对⽅释放⾃⼰想要的“资源”的过程,也就产⽣了死锁。
1import threading
2import time
3
4# 创建两个锁
5lock_a=threading.Lock()
6lock_b=threading.Lock()
7
8
9def philosopher_a():
10 for i in range(99):
11 # 上锁
12 lock_a.acquire()
13 print('哲学家a给lock_a加锁,抢到了筷⼦a')
14 lock_b.acquire()
15 print(f'哲学家a给lock_b加锁,抢到了筷⼦b,ab两只筷⼦到⼿,吃第{i+1}⼝饭')
16 # 解锁
17 lease()
18 print('哲学家a给lock_a解锁,释放了筷⼦a')
19 lease()
20 print('哲学家a给lock_b解锁,释放了筷⼦b')
21 # time.sleep(0.5)
22
23def philosopher_b():
24 for i in range(99):
25 # 上锁
26 lock_b.acquire()
27 print('哲学家b给lock_b加锁,抢到了筷⼦b')
28 lock_a.acquire()
29 print(f'哲学家b给lock_a加锁,抢到了筷⼦a,ab两只筷⼦到⼿,吃第{i+1}⼝饭')
30 # 解锁
31 lease()
32 print('哲学家b给lock_b解锁,释放了筷⼦b')
33 lease()
34 print('哲学家b给lock_a解锁,释放了筷⼦a')
35 # time.sleep(0.5)
36
37
38if __name__ == '__main__':
39 t1=threading.Thread(target=philosopher_a)
40 t2=threading.Thread(target=philosopher_b)
41 t1.start()
42 t2.start()
python怎么读取桌面上的文件
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论