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

本文探讨了读者-写者问题及其解决方案,特别是在多进程环境中如何协调读进程和写进程对共享文件的访问,避免数据混乱。介绍了通过信号量机制实现的写者优先策略。
  一个数据文件或记录可以被多个进程共享使用,我们将读文件的进程称为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


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kylin5221

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值