操作系统之读者与写者问题

问题:  首先,有一个共享文件,可以让同时多个读者读,但只要有一个读者在读,就不允许写者写文件,即是说当写者写的时候,只允许一个写者写,其他到来的读者和新到来的

写者等待.

首先,我们设定一个互斥信号量 :mutex来对读者数量的限制,初始化为1,对写者定义一个信号量:write,初始值为1,再定义一个整型:count ,初始化值为0,当它为0时,则表面下面一个

到来的读者为第一个读者,为1的话代表有其他读者的到来.而读者与写者是不能同时进行的,所以具体信号量的P,V操作如下:

int  mutex  = 1;     //用于记录读者的互斥信号量

int  write  = 1;      //用于写者的信号量,无论什么时候只允许一个写者

int  count  = 0;    //记录读者的数量

//主函数

main()

{

    Cobegin:

          read();    //读者优先

          write();

    Coend;

}

//读者进程

read  ()

{

     while(true)

{

      p(mutex);

      if(count==0)   //一开始写者不能写,这是读者优先算法 

            p(write);    //执行此操作,阻塞写者进程

     count++;         //记录读者的数量

    v(mutex);  

     读文件();  

    P(mutex);  

    count--;

    if(count==0) 

          V(write); //如果此时读者数量为0,写者才可以写,因此执行V操作唤醒写者进程

   V(mutex);

}

}

//写者进程

write()

{

     while(true)

{

       P(write);

       写文件();

      V(write);

}

}

这只是读者优先的算法,后面还有写者优先等等,大家可以自行百度了解一下,其实原理都一样,要分清楚哪个是先做,哪一步骤的优先级比较高~~~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值