-1-
北京邮电大学 操作系统实验 实验报告
班号: 姓名: 学号:
实验日期:2011.11.18 实验名称: 哲学家就餐问题(避免死锁)
一、实验目的
1、熟悉 LINUX 的基本环境,了解 LINUX 下进程和线程的实现
三、实验内容
(1)安装 LINUX;
( 2 ) 熟 悉 UNIX/LINUX 的 常 用 基 本 命 令 如 ls 、 who 、 wc 、 pwd 、 ps 、 pstree 、
top,cat,cd,chgrp,chmod,chown,comm,cmp,cp,rm,diff,mv,rmdir 等,了解系统的环境。
(3)利用 pthread 及系统的信号量(semaphore.h)
,实现哲学家进餐问题(避免死锁)
:
四、项目要求及分析
假如所有的哲学家都同时拿起左侧筷子,看到右侧筷子不可用,又都放下左侧筷子,等
一会儿,又同时拿起左侧筷子,如此这般,永远重复。对于这种情况,即所有的程序都在无
限期地运行,但是都无法取得任何进展,即出现饥饿,所有哲学家都吃不上饭。
规定在拿到左侧的筷子后,先检查右面的筷子是否可用。如果不可用,则先放下左侧筷
子,等一段时间再重复整个过程。
分析:当出现以下情形,在某一个瞬间,所有的哲学家都同时启动这个算法,拿起左侧
的筷子,而看到右侧筷子不可用,又都放下左侧筷子,等一会儿,又同时拿起左侧筷子……
如此这样永远重复下去。对于这种情况,所有的程序都在运行,但却无法取得进展,即出现
饥饿,所有的哲学家都吃不上饭。
解决死锁问题:为了避免死锁,把哲学家分为三种状态,思考,饥饿,进食,并且一次
拿到两只筷子,否则不拿.。
仅当一个哲学家左右两边筷子都可用时,才允许他拿筷子。这样要么一次占有两只筷子
在吃面,然后释放所有资源;要么不占用资源。这样就不会导致死锁了。
五、具体实现
5.1、流程图(参考)