校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > 专业课 > 进程同步
题目

设有一缓冲池 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);
}
}


C 0条回复 评论

帖子还没人回复快来抢沙发