题目
设有一缓冲池 P , P 中含有 20 个可用缓冲区,一个输入进程将外部数据读入 P ,另有一个输出进程将 P 中数据取出并输出。若进程每次操作均以一个缓冲区为单位,试用记录型信号量写出两个进程的同步算法。
解答
与生产者和消费者问题一样,只是 empty 的初始值设为 20 即可
参考代码:
Semaphore empty=20; //空缓冲区的大小
Semaphore full=0; //有数据的缓冲区的大小
Semaphore mutex=1; //互斥信号量
int in=0,out=0;
Input()
{
while(true)
{
produce an item in nextp; //产生一个商品暂存在nextp中
wait(empty);
wait(mutex);
p[in]=nextp;
in=(in+1)%20;
signal(mutex);
signal(full);
}
}
Output()
{
while(true)
{
wait(full);
wait(mutex);
nextc=p[out];
out=(out+1)%20;
signal(mutex);
signal(empty);
}
}
帖子还没人回复快来抢沙发