一、实验目的:
学习和掌握并发进程同步的概念和方法。
二、实验要求:
1、程序语法
philosopher [ -t <time> ]
<time>是哲学家进餐和沉思的持续时间值,缺省值为2秒。
2、五个哲学家的编号为0~4,分别用五个进程独立模拟。
3、程序的输出要简洁,仅输出每个哲学家进餐和沉思的信息。例如,当编号为3的哲学家在进餐时,就打印:
philosopher 3 iseating
而当他在沉思时,则打印:
philosopher3 is thinking
除此之外不要输出其他任何信息。
4、利用课堂已教授的知识而不使用线程或IPC机制进行同步。
5、程序应该一直运行,直到人为地终止它(按Ctrl-C或Ctrl-\)。不允许出现僵尸进程。
三、实验过程:
用for循环和fork函数生成5个哲学家进程,如果是前4个哲学家,思考<time>秒后,锁住左手边和右手边的叉子,然后开始用餐,进餐<time>秒后,释放两边的叉子,然后到下一个哲学家,用lock判断能否同时拿起两边的叉子,要是不能同时拿起则一直等待。第5个哲学家最后应拿起第4把叉子和第0把叉子,用while(1)循环使程序一直运行。
四、实验程序:
#include "apue.h"
#include <