
消费者生产者的问题(semaphore mutex) 本人很菜,希望要详细回答,因为课本用的是pascal语言
varmutex,empty,full:semaphore:=1,n,0;buffer:array[0,***,n-1]ofitem;in,out:integer:=0,...
var mutex,empty,full:semaphore:=1,n,0;
buffer:array[0,***,n-1] of item;
in,out:integer:=0,0;
begin
parbegin
proceducer:begin
repeat
*
*
*
producer an item nextp;
*
*
*
wait(empty);
wait(mutex);
buffer(in):=nextp;
in:=(in+1)mod n;
signal(mutex);
gianal(full);
until false;
end
consumer:begin
repeat
wait(full);
wait(mutex);
nextc:=buffer(out);
out:=(out+1)mod n;
signal(mutex);
signal(empty);
consumer the item in nextc;
until false;
end
parend
end
详细,详细,详细,每一部,还有一些字符,要耐心,如果满意,可以加到一百分,也可以在线教导我,qq838885748,不过,最好直接每部写出来,不能复制别人类似的答案
期待通晓的人来给小弟一下指导
诶,是被书本前面类似一题误导了,今天再看看已经懂了。我就自问自答吧==!
var mutex,empty,full:semaphore:=1,n,0;empty是指空位置的数量,而full是装满的数量
buffer:array[0,***,n-1] of item;一共n个位置,来放物品
in,out:integer:=0,0;下一个要放物品和取物品的位置
begin 与end相对应
parbegin
proceducer:begin
repeat 与until false相对应
* 觉得省略号可以省略==!
*
*
producer an item nextp; 代表生产者的操作
*
*
*
wait(empty); wait就是p操作,每次让里面的变量减一,既是空位置数量减少了一个
wait(mutex); wait(mutex)与signal(mutex)想对应,分别代表互斥开始,可解放互斥
buffer(in):=nextp; nextp就是要放在第in位的物品
in:=(in+1)mod n; 指向下一位
signal(mutex); v操作,解放互斥
signal(full); signal就是v操作,让里面元素加一,既是装满数量增加一个
until false;
end
消费者也一样, 展开
buffer:array[0,***,n-1] of item;
in,out:integer:=0,0;
begin
parbegin
proceducer:begin
repeat
*
*
*
producer an item nextp;
*
*
*
wait(empty);
wait(mutex);
buffer(in):=nextp;
in:=(in+1)mod n;
signal(mutex);
gianal(full);
until false;
end
consumer:begin
repeat
wait(full);
wait(mutex);
nextc:=buffer(out);
out:=(out+1)mod n;
signal(mutex);
signal(empty);
consumer the item in nextc;
until false;
end
parend
end
详细,详细,详细,每一部,还有一些字符,要耐心,如果满意,可以加到一百分,也可以在线教导我,qq838885748,不过,最好直接每部写出来,不能复制别人类似的答案
期待通晓的人来给小弟一下指导
诶,是被书本前面类似一题误导了,今天再看看已经懂了。我就自问自答吧==!
var mutex,empty,full:semaphore:=1,n,0;empty是指空位置的数量,而full是装满的数量
buffer:array[0,***,n-1] of item;一共n个位置,来放物品
in,out:integer:=0,0;下一个要放物品和取物品的位置
begin 与end相对应
parbegin
proceducer:begin
repeat 与until false相对应
* 觉得省略号可以省略==!
*
*
producer an item nextp; 代表生产者的操作
*
*
*
wait(empty); wait就是p操作,每次让里面的变量减一,既是空位置数量减少了一个
wait(mutex); wait(mutex)与signal(mutex)想对应,分别代表互斥开始,可解放互斥
buffer(in):=nextp; nextp就是要放在第in位的物品
in:=(in+1)mod n; 指向下一位
signal(mutex); v操作,解放互斥
signal(full); signal就是v操作,让里面元素加一,既是装满数量增加一个
until false;
end
消费者也一样, 展开
1个回答
展开全部
题目啊大哥,题目,还有你打的是什么玩意儿?完全看不懂,而且少了好多分号........
追问
你还是洗洗睡吧,题目就在你眼前了,你还不知道,还在问少分号,一看就知道,你没有见过。。。
那根本不是完全的语言的,只是一个理解的框架,不过还是很感谢你的参与
追答
额
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?

2024-08-15 广告
欧洲QP(Qualified Person)声明是欧盟及PIC/S成员国在医药产品临床阶段的一种正式GMP(良好生产规范)符合性声明,具有法律认可的效力。该声明证明了企业在药品生产各环节,包括原料、生产、质量控制、仓储及物流等方面均符合欧盟...
点击进入详情页
本回答由北京金瑞博提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询