五哲学家进餐问题代码
时间: 2024-05-06 15:13:42 浏览: 139
哲学家进餐问题的代码
五哲学家进餐问题是一个经典的并发编程问题,它描述了五个哲学家围坐在一张圆桌旁,每个哲学家面前有一碗米饭和一只筷子。哲学家们交替进行思考和进餐,但是他们只能同时拿起自己左右两边的筷子才能进餐。以下是一个简单的五哲学家进餐问题的代码示例:
```python
import threading
class Philosopher(threading.Thread):
def __init__(self, name, left_fork, right_fork):
threading.Thread.__init__(self)
self.name = name
self.left_fork = left_fork
self.right_fork = right_fork
def run(self):
while True:
self.think()
self.eat()
def think(self):
print(f"{self.name} is thinking.")
def eat(self):
# 获取左边的筷子
self.left_fork.acquire()
# 获取右边的筷子
self.right_fork.acquire()
print(f"{self.name} is eating.")
# 放下左边的筷子
self.left_fork.release()
# 放下右边的筷子
self.right_fork.release()
if __name__ == "__main__":
forks = [threading.Lock() for _ in range(5)]
philosophers = [Philosopher(f"Philosopher {i}", forks[i], forks[(i + 1) % 5]) for i in range(5)]
for philosopher in philosophers:
philosopher.start()
for philosopher in philosophers:
philosopher.join()
```
上述代码使用Python的`threading`模块实现了五哲学家进餐问题。每个哲学家都是一个线程,通过`acquire()`和`release()`方法来获取和释放筷子。当一个哲学家同时拿到左右两边的筷子时,他就可以进餐。否则,他需要等待其他哲学家释放筷子。
阅读全文