解:保证写者优先于读者,即一旦有写者到达时,则新读者要等待。
信号量:
● rmutex——当至少有一个写者到达时,阻止所有读者访问的互斥操作信号量,初值为1。
● wmutex——写者间以及读者与写者间互斥操作信号量,初值为1。
● x——控制 readcount 变量修改的互斥信号量,初值为1。
● y——控制 writecount 变量修改的互斥信号量,初值为1。
● z——有写者时只允许一个读者在 rmutex 上排队,其他读者在信号量z上排队,初值为1。
计数变量:
● readcount——读者计数器,初值为0。 它控制对 wmutex 的设置。
semaphore rmutex = 1;
semaphore wmutex = 1;
semaphore x = 1;
semaphore y = 1;
semaphore z = 1;
semaphore readcount = 0;
semaphore writecount = 0;
读者进程: