一、问题描述
要求:
- 允许多个读者可以同时对文件进行执行读操作
- 只允许一个写者往文件中写信息
- 任一写者在完成写作操作之前不允许其他读者或写着进入缓冲区
- 写着执行写操作之前,应让已有的写者和读者全部退出
使用PV操作求解该问题
二、读者优先
int readercount=0;
semaphore mutex=1;
semaphore readermutex=1;
reader()
{
while(1)
{
P(readermutex);
if(readercount==0)
{
P(mutex);
}
readercount++;
V(readermutex);
读文件;
P(readermutex)
readercount--;
if(readercount==0)
{
V(mutex);
}
V(readercount);
}
}
writer()
{
while(1)
{
P(mutex)
写文件;
V(mutex);
}
}
三、写者优先
int readercount=0;
semaphore mutex=1;
semaphore writermutex=1;
semaphore readermutex=1;
reader()
{
while(1)
{
P(writermutex);//是否有写者在用缓冲区
P(readermutex);
if(readercount==0)
{
P(mutex);
}
readercount++;
V(readermutex);
V(writermutex);
读文件;
P(readermutex)
readercount--;
if(readercount==0)
{
V(mutex);
}
V(readercount);
}
}
writer()
{
while(1)
{
P(writermutex);//是否有其他写者在用缓冲区
P(mutex)
写文件;
V(mutex);
V(writermutex);
}
}