有四个进程P1,P2,P3,和P4共享一个缓冲区,进程P1向缓冲区中存入消息,进程P2,P3和P4从缓冲区中取消息,要求发送者必须等三个进程都取过本条消息后才能发送下一条消息,缓冲区内每次只能容纳一个消息,用PV操作描述四个进程存取消息的情况。
1 分析:
读者:P2,P3,P4都可以访问缓冲区,可同时访问
写者:P1存入消息
2 基本思想:利用读者-写者模型完成。”发送者必须等三个进程都取过本条消息后才能发送下一条消息”说明读者优先。
3形式化描述:
semaphore Wmutex =1,Rmutex=1;
int Rcount=0;
void reader() /* P2,P3,P4进程:*/
{
while(true)
{
P(Rmutex);
if(Rcount==0) P(Wmutex);
Rcount++;
V(Rmutex);
读消息; /* P2,P3,P4执行读操作*/
P(Rmutex);
Rcount--;
if(Rcount==0) V(Wmutex);
V(Rmutex);
}
}
void writer() /*P1进程:*/
{
while(true)
{
P(Wmutex);
P1存入消息;
V(Wmutex);
}
}