background image
 
-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、流程图(参考)