多个进程共享一个文件, 其中只读文件的称为读者, 只写文件的称为写者。 读者可以同时读, 但写者只能独立写。
说明进程间的相互制约关系, 应设置哪些信号量?
进程间的相互制约关系有三类:
一是读者之间允许同时读;
二是读者与写者之间须互斥;
三是写者之间须互斥。
为了解决读者、 写者之间的同步, 应设置两个信号量和一个共享变量; 读互斥信号量 rmutex, 用于使读者互斥地访问共享变量 count, 其初值为 1; 写互斥信号量 wmutex, 用于实现写者与读者的互斥及写者与写者的互斥,其初值为 1; 共享变量 count, 用于记录当前正在读文件的读者数目, 初值为 0。
用 P、 V 操作写出其同步算法。
进程间的控制算法如下所示:

修改上述的同步算法, 使得它对写者优先, 即一旦有写者到达, 后续的读者必须等待, 而无论是否有读者在读文件。
为了提高写者的优先级, 增加一个信号量 S, 用于在写进程到达后封锁后续的读者。 其控制流程如下:

