首页 > 试题广场 >

回答问题

[问答题]


1)一个生产者和一个消费者使用一个共享缓冲区进行合作时,应该如何使用信号量机制来协调它们之间的工作流程?请用伪代码表示。

2)如果N个生产者和M个消费者使用P个缓冲区进行合作,应该如何使用信号量机制来协调它们之间的工作流程?请用伪代码表示。


1) semaphore empty=1,full=0
Producer
while(1)
{
  produce ; 
  wait(empty);
  put in buffer;
  signal(full);
}
 
Consumer
while(1)
{
  wait(full);
  take out from buffer;
  signal(empty);
  consume
}
 
2)semaphore empty=n,full=0,mutex1=1, mutex2=1;
Buffer buf[n]; int in=0,out=0;
%使用循环缓冲级数
Producer
while(1)
{
  produce;
  wait(empty);  
  wait(mutex1)
  put;  
  in=(in+1)%n;
  signal(mutex1)
  signal(full);  
}
 
Consumer
while(1)
{
  wait(full);
  wait(mutex2)
  take;
  out = (out+1)%n; 
  signal(mutex2)
  signal(empty); 
  consume;
}
 
 
发表于 2017-05-12 00:21:14 回复(0)