2 zwfgogo ZWFGOGO 于 2015.07.02 16:50 提问

关于操作系统多线程编程 5C

10个洗碗工在池子里洗澡,池子只能容下5个人同时洗,每个人每次洗碗的时间在30-50秒之间随机,每个洗碗工就是不停的取碗然后去池子洗碗,如此循环。如果池子里已经有5个人了,其他的洗碗工就只能等池子里有空位了才能去洗碗。

支持随时查看每个洗碗工的统计数据,包括洗了多少个碗,在池子里花费的平均时间,以及在池子外等待的平均时间。

希望高手给出编程解答或者相关的编程例子,或者流程图。要求用c语言实现,如果是linux多线程解决就最好了!

5个回答

oyljerry
oyljerry   Ds   Rxr 2015.07.02 18:48

你这个就是经典生产者与消费者模型
http://blog.chinaunix.net/uid-15751163-id-2762279.html

u012454516
u012454516   2015.07.02 17:19

http://yunpan.cn/cQDZMjfZntX5Z 访问密码 28eb
这个是跨平台的,是c++的自己拿去改改吧

u011547347
u011547347   2015.07.02 20:10

首先,我觉得此问题的解决需要多线程的原因无非是需要支持随时查看每个洗碗工的统计数据,即一种异步问题
此问题开两个线程即可,一个任务线程,负责管理洗碗的过程控制,一个监察线程,供查看统计数据
在任务线程中,需要考虑一个问题,即洗碗工开始洗碗时就确定其洗碗时间,抑或每个洗碗工都有其固定的洗碗时间,还是洗碗过程中的允许的每一秒都判断一下是否洗碗结束。此线程每隔一秒运行一次,负责管理洗碗的的进度
监察线程被IO阻塞,能够异步地(随时)查看数据
此外需要加互斥锁,保证修改时不能访问这些数据

呃,一个题外话,貌似第一句有文字错误”洗澡“

max_min_
max_min_   Rxr 2015.07.03 00:32

不多说了!生产者和消费者问题。

google下网络很多成熟的思路了。

miracle_yao
miracle_yao   2015.07.03 16:35

典型的生产者和消费者问题。参考下面的例子:
http://blog.csdn.net/q345852047/article/details/6741226

Csdn user default icon
上传中...
上传图片
插入图片