要求:
1.三个进程P1,P2,P3共享某一资源F;
2.P1只读F;
3.P2只写F;
4.P3先读F后写F;
5.可多进程读F,但只能一个进程写F,且在写时不允许读。
int readcount=0;//记录读者数量
semaphore rmutex=1;//readcount的互斥访问信号量
semaphore mutex=1;//F资源的互斥访问信号量
P1()//只读
{
while()
{
P(rmutex);
if(readcount==0)P(mutex);
readcount++;
V(rmutex);
READ F;
P(rmutex);
readcount--;
if(readcount==0)V(mutex);
V(rmutex);
}
}
P2()//只写
{
while()
{
P(mutex);
WRITE F;
V(mutex);
}
}
P3()//先读后写
{
while(1)
{
P(rmutex);
if(readcount==0)P(mutex);
readcount++;
V(rmutex);
READ F;
P(rmutex);
readcount--;
if(readcount==0)V(mutex);
V(rmutex);
P(mutex);
WRITE F;
V(mutex);
}
}