-->
当前位置:首页 > 题库 > 正文内容

主观题:h568.利用AND型信号量和管程解决生产者-消费者问题。

Luz3年前 (2022-11-03)题库521
利用AND型信号量和管程解决生产者-消费者问题。







答案:解:
利用AND信号量解决生产者-消费者问题的算法描述如下:
var mutex,empty,full: semaphore:=1,n,0;
buffer: array[0,...,n-1] of item;
in out: integer := 0, 0;
begin
parbegin
producer: begin
repeat
produce an item in nextp;
Swait(empty, mutex);
buffer(in) := nextp;
in := (in+1) mod n;
Ssignal(mutex, full);
until false;
end
consumer: begin
repeat
Swait(full, mutex);
nextc := buffer(out);
out := (out+1) mod n;
Ssignal(mutex, empty);
consume the item in nextc;
until false;
end
parend
end (10分)
利用管程机制解决生产者-消费者问题,首先需要建立一个管程ProducerConsumer,其中包含两个过程insert(item)和consumer(item)。生产者-消费者同步问题可以用伪代码描述如下:
monitor ProducerConsumer
condition full,empty;
int count;
void insert(int item)
{
if (count==N) wait(full);
insert(item);
count=count+1;
if (count==1) signal(empty);
}
int remover()
{
if (count==0) wait(empty);
remove=remove_item;
count=count-1;
if (count==N-1) signal(full);
}
count=0;
end monitor
void producer()
{
while (true)
{
item=produce_item;
ProducerConsumer.insert(item);
}
}
void consumer()
{
while (true)
{
item=ProducerConsumer.remove;
consume(item) (10分)
}
}

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。