主观题:h402.设有n个缓冲区构成的循环缓冲区,每个缓冲区能容纳一个整数。写进程Writer把整数逐个存入缓冲区,读进程Reader则逐个从缓冲区中读......
设有n个缓冲区构成的循环缓冲区,每个缓冲区能容纳一个整数。写进程Writer把整数逐个存入缓冲区,读进程Reader则逐个从缓冲区中读出并打印输出,要求打印的与输入的完全一样,即个数、次序、数值一样。试问:
(1)写进程与读进程间具体的制约关系如何?
(2)用PV操作写出这两个进程的同步算法程序。
答案:解:
(1) 写进程与读进程间具体的制约关系是同步和互斥关系。(3分)
(2) 采用PV操作的同步算法程序如下:
semaphore mutex, empty, full;
mutex=1; //互斥信号量,用于两个进程互斥访问缓冲区
empty=n; //同步信号量,表示空闲缓冲区的数量
full=0; //同步信号量,表示放有整数的缓冲区个数
parbegin
process Writer( )
{
while (1) {
produce_an_integer( );
P(empty);
P(mutex);
write_an_integer_to_buffer( );
V(mutex);
V(full);(4分)
}
}
process Reader( )
{
while (1) {
P(full);
P(mutex);
get_an_integer_from_buffer( );
V(mutex);
V(empty);
print_an_integer( );(3分)
}
}
parend
(1)写进程与读进程间具体的制约关系如何?
(2)用PV操作写出这两个进程的同步算法程序。
答案:解:
(1) 写进程与读进程间具体的制约关系是同步和互斥关系。(3分)
(2) 采用PV操作的同步算法程序如下:
semaphore mutex, empty, full;
mutex=1; //互斥信号量,用于两个进程互斥访问缓冲区
empty=n; //同步信号量,表示空闲缓冲区的数量
full=0; //同步信号量,表示放有整数的缓冲区个数
parbegin
process Writer( )
{
while (1) {
produce_an_integer( );
P(empty);
P(mutex);
write_an_integer_to_buffer( );
V(mutex);
V(full);(4分)
}
}
process Reader( )
{
while (1) {
P(full);
P(mutex);
get_an_integer_from_buffer( );
V(mutex);
V(empty);
print_an_integer( );(3分)
}
}
parend