书中注释答案为6
---选(北京工业出版社 P33.26)
我是用"8+6-9+1=6",这是我蒙上的,我去查了信号量的知识,但实在还是不懂,恳请会此算法的人帮助,谢谢
11 个解决方案
#1
答案不是6,是1.
#2
问: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.
解: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.
#3
我已将您的解释抄下,拿回去,我再好好理解消化一下,谢谢
#4
复制黏贴就行了,抄下来太累了,而且会抄错掉.
#5
我也很想这样,“复制,粘贴”,但我在网吧上网,不能用USB接口,条件所限,没办法,呵呵
#6
可以发邮件发回家.
#7
#8
#9
#10
再问您一下,您上面的代码是 “汇编”吗
#11
pascal吧,呵呵
#1
答案不是6,是1.
#2
问: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.
解: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.
#3
我已将您的解释抄下,拿回去,我再好好理解消化一下,谢谢
#4
复制黏贴就行了,抄下来太累了,而且会抄错掉.
#5
我也很想这样,“复制,粘贴”,但我在网吧上网,不能用USB接口,条件所限,没办法,呵呵
#6
可以发邮件发回家.
#7
#8
#9
#10
再问您一下,您上面的代码是 “汇编”吗
#11
pascal吧,呵呵