一个关于生产者与消费者的问题

pass299 2009-10-11 09:29:09
在由9个生产者,6个消费者,共享容量为8的缓冲器组成的生产者与消费者问题中,互斥使用缓冲器的信号量mutex的初值应该为()

书中注释答案为6
---选(北京工业出版社 P33.26)
我是用"8+6-9+1=6",这是我蒙上的,我去查了信号量的知识,但实在还是不懂,恳请会此算法的人帮助,谢谢
...全文
602 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fang7164298 2009-10-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 pass299 的回复:]
再问您一下,您上面的代码是 “汇编”吗
[/Quote]
pascal吧,呵呵
pass299 2009-10-15
  • 打赏
  • 举报
回复
再问您一下,您上面的代码是 “汇编”吗
fire_woods 2009-10-13
  • 打赏
  • 举报
回复
可以发邮件发回家.
pass299 2009-10-12
  • 打赏
  • 举报
回复
我也很想这样,“复制,粘贴”,但我在网吧上网,不能用USB接口,条件所限,没办法,呵呵
fire_woods 2009-10-12
  • 打赏
  • 举报
回复
复制黏贴就行了,抄下来太累了,而且会抄错掉.
pass299 2009-10-12
  • 打赏
  • 举报
回复
我已将您的解释抄下,拿回去,我再好好理解消化一下,谢谢
perfecttt 2009-10-11
  • 打赏
  • 举报
回复
问:m个生产者,n个消费者,容量为r的缓冲区,(m,n,r都大于1),要求生产者和消费者互斥存取物品.
解:1)生产者和消费者之间要同步,类似问题一,用两个信号量empty,full;2)m个生产者之间要互斥,n个消费者之间也要互斥,同时要求生产者和消费者互斥存取物品,因此设两个计数器in,out和一个互斥信号量mutex.

代码:



begin
buffer:array[0r-1]: integer
in,out:integer=0,0;
empty=r,full=0,mutex=1:semaphore;
cobegin
process Producer-i(i=1,2m)
begin
L1:生产一件物品;
wait(empty)
wait(mutex)
buffer[in] = product;
in = (in+1)mod r;
signal(mutex)
signal(full)
goto L1;
end
process Consumer-j(j=1,2n)
begin
L2: wait(full)
wait(mutex)
take a product from buffer[out];
out =(out+1)mod r;
signal(mutex)
signal(empty)
消费一件物品;
goto L2;
end
初值都是1.
perfecttt 2009-10-11
  • 打赏
  • 举报
回复
答案不是6,是1.

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧