首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 数据库 第二书店 程序员

silence_dai/ 


共1个网摘 [ 1 ]   |  访问silence_dai的个人空间

〖高分求解〗★★★★★【C或C , 来模拟 5位 哲学家进餐的问题。】★★★★★〖up有分〗

silence_dai收录,使用标签:C++, thread,时间:2006-11-3 12:46:19 | 相关网摘我也收藏

为每个哲学家使用POSIX线程(pthread)建立独立的线程(有独立的id),用互斥(叉子其他哲学家使用时,另一个哲学家不能使用)和条件(哲学家饿了才尝试去得到叉子,得到相邻的左右两把叉子才能进餐)来分到叉子。



关键事件:

1. 哲学家饿了就要尝试去得到叉子。
2. 哲学家得到相邻的左右两把叉子才可以进餐
3. 吃完了就要释放两把叉子

每个事件发生就打印一行。并用gettimeofday()显示毫秒 。

A. 用'X' 表示哲学家在进餐
B. 用'O' 表示哲学家在思考
C. 用'!' 表示哲学家饿了

例子:
1 2 3 4 5
0 ms: O O O O O
95 ms: ! O O O O
95 ms: X O O O O
214 ms: X O O O !
327 ms: X O O ! !
328 ms: X O O X !
444 ms: O ! O O !
444 ms: O X O O X

(注意:肯定不会有两个X出现在相邻的列中)

程序在运行“50次成功进餐”发生后停止。
哲学家在“进餐”和“思考”的“时间周期”是一个0.1到0.5之间的随机数字。
5个哲学家都从思考开始。
可以考虑使用usleep()
还可以使用旗语(semaphore)的 P() 和 V()来解决互斥、



共1个网摘 [ 1 ] 

silence_dai/相关标签



网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
Copyright © 2000-2008, CSDN.NET, All Rights Reserved