问题 问答题

什么是P、V操作试用P、V操作描述读者一写者问题。要求允许几个阅读者可以同时读该数据集,而一个写者不能与其他进程(不管是写者还是读者)同时访问该数据集。

答案

参考答案:读者一写者问题是经常出现的一种同步问题。计算机系统中的数据(文件、记录)常被多个进程共享,但其中某些进程可能只要求读数据(称为Reader),另一些进程则要求修改数据(称为Writer)。就共享数据而言,Reader和Writer是两种不同类型的进程。一般地,两个或两个以上的Reader进程同时访问共享数据时不会产生副作用,但若某个Writer和其他进程(Reader或Writer)同时访问共享数据时,则可能产生错误。为了避免错误,同时尽可能地让读者进程和写者进程并发运行,只要保证任何一个写者进程能与其他进程互斥访问共享数据即可。这个问题称为读者一写者问题。
P、V操作是定义在信号量S上的两条原语,它是解决进程同步与互斥的有效手段。
定义下列信号量:互斥信号量rmutex,初值为1,用于使读者互斥地访问读者计数器,共享变量rcount;互斥信号量wmutex,初值为1,用于实现写者之间以及写者与读者之间互斥地访问共享数据集。用信号量和P、V操作描述读者一写者问题如下:
Begin
rmutex wmutex:semaphore;
rcount:Integer;
rmutex=wmutex=1;
rcount=0;
Cobegin
Process procedure Reader
begin
P(rmutex); //保护rcount
rcount:=rcount+1
if rcount=1 then P(wmutex); //保证没有writer在写
V(rmutex);
Perform read operations;
P(rmutex);
rcount:=rcount-1;
if rcount=0 then V(wmutex); //没有reader时,允许writer写操作
V(rmutex);
end
Process procedure Writer
begin
P(wmutex);
perform write operations;
V(wmutex);
end
Coend
End

问答题 简答题
判断题