操作系统(经典进程同步问题)之写者优先

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cbcxvbfxgb/article/details/66974416
  一个数据文件或记录可以被多个进程共享使用,我们将读文件的进程称为reader,写文件的进程成为writer。允许对个进程同属进行读取一个共享对象,因此读操作不会造成数据数据文件的混乱,但不允许reader,writer进行同时对共享文件的访问,因为这种访问会造成文件的数据混乱。所谓读者-写者问题。

  读者-写者问题中,读者优先问题描述下面这种情况。

  在文件的访问读取中,如果有写进程,写先进行写进程的调度,读进程在所有读进程完成后进行执行。这就是写者优先。
  解决方法如下:

  设置wmutex为各写者间的互斥时间访问。
  设置Filemutex为文件互斥事件竞争访问
  wcount为写进程的数量
  rcount为读进程的数量
  mutex1读进程互斥访问
  mutex2写进程互斥访问
    Writer:begin
        wait(mutex1): //申请文件的写进程
            wcount = wcount+1; //文件写进程+1
            if wcount = 1 then wait(Filemutex); //判断文件是不是有一个写进程,如果一个写进程申请文件使用权,确保文件无进程使用,否则写进程阻塞在这里
        signal(mutex1);
        wait(wmutex);//申请写进程开始写
        写数据;
        singal(wmutex);//释放写进程
        wait(mutex1);//申请文件写进程
            wcount = wcount - 1; //写进程-1
            if wcount = 0 then singal(Filemutex);//此时,写进程为0,申请文件使用权进行释放写进程(因为写写进程互斥)
        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


展开阅读全文

没有更多推荐了,返回首页