【正确答案】读者一写者问题是经常出现的一种同步问题。计算机系统中的数据(文件、记录)常被多个进程共享,但其中某些进程可能只要求读数据(称为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