一个数据文件或记录可以被多个进程共享使用,我们将读文件的进程称为reader,写文件的进程成为writer。允许对个进程同属进行读取一个共享对象,因此读操作不会造成数据数据文件的混乱,但不允许reader,writer进行同时对共享文件的访问,因为这种访问会造成文件的数据混乱。所谓读者-写者问题。
读者-写者问题中,读者优先问题描述下面这种情况。
在文件的访问读取中,如果有写进程,写先进行写进程的调度,读进程在所有读进程完成后进行执行。这就是写者优先。
解决方法如下:
设置wmutex为各写者间的互斥时间访问。
设置Filemutex为文件互斥事件竞争访问
wcount为写进程的数量
rcount为读进程的数量
mutex1读进程互斥访问
mutex2写进程互斥访问
Writer:begin
wait(mutex1):
wcount = wcount+1;
if wcount = 1 then wait(Filemutex);
signal(mutex1);
wait(wmutex);
写数据;
singal(wmutex);
wait(mutex1);
wcount = wcount - 1;
if wcount = 0 then singal(Filemutex);
singal(mutex1);
end
reader:begin
wait(mutex1); //读者先进行申请文件的写申请,如果能够申请到mutex1表明有写进程正在执行,此时读进程阻塞
singal(mutex1);//获取mutex1后释放,让写进程能够随时申请到写进程
wait(mutex2);
rcount = rount + 1;
if rcount = 0 then wait(Filemutex);
singal(mutex2);
wait(mutex2);
读操作;
singal(mutex2);
wait(mutex2)
rcount = rcount -1;
if rcount = 0 then singal(Filemutex);
singal(mutex2);
end