-->
当前位置:首页 > 题库

主观题:h407.用信号量和P、V操作解决进程之间的同步互斥问题。有n(n>1)个进程将字符读入到一个容量为80的缓冲区中,当缓冲区满后......

Luz4年前 (2022-09-13)题库340
用信号量和P、V操作解决进程之间的同步互斥问题。有n(n>1)个进程将字符读入到一个容量为80的缓冲区中,当缓冲区满后,有另一个进程Pb负责一次取走这80个字符。这种过程循环往复,请写出n个读入进程(P1,P2,P3,...,Pn)和Pb的动作序列。(可用文字或伪代码来描述动作序列,设每个读入进程每次读入1个字符到缓冲区)







答案:解:
semaphore mutex, empty, full;
mutex=1; //互斥信号量,用于互斥访问共享变量count
empty=80; //同步信号量,表示当前缓冲区可容纳的字符个数
full=0; //同步信号量,1表示缓冲区满,0表示缓冲区未满
int count=0; //计数变量
parbegin
process Pi ( ) // i=1, 2, 3, ... , n(3分)
{
while (1) {
读入一个字符;
P(empty);
P(mutex);
将读入的字符存入缓冲区;
count++;
if (count==80) V(full);
V(mutex);(3分)
}
}
process Pb ( )
{
while (1) {
P(full);
P(mutex);
从缓冲区取走80个字符;
count=0;
V(mutex);
for (int i=0; i<80; i++)
V(empty);(4分)
}
}
parend