zoukankan      html  css  js  c++  java
  • 生产者与读写问题

    进程的同步-----生产者与消费者问题

    问题描述:

     

     

     生产者在放的时候,不能同时放

    消费者在拿的时候,不能同时拿

    生产者放的时候,消费者也不能拿

    这是互斥关系

    然后生产者往缓冲区放,消费者从缓冲区拿

    这是同步关系

    使用P、V操作时的注意事项

    P、V操作总是成对出现的;互斥操作时他们处于同一进程中;同步操作时他们处于不同进程中。

    P、V操作的位置十分重要,放置不当会造成严重后果,注意逻辑关系

    读者--写者问题

      问题描述:一个数据对象(文件、记录)可以为多个并发进程共享。其中有的进程只需要读其中的内容,我们称为“读者”;有的进程负责更新其中内容(读/写),我们称为“写者”。“读者”可以同时读取共享数据对象;“写者”不能和其他任何进程同时访问数据对象。

    如何实现?

    分析:

      读--写:互斥访问

      写--写:互斥访问

      读--读:允许同时访问

    第一类读者--写者问题:“读者”优先,只要有读进程在读,写进程被迫等待。

    设置信号量
    semaphore  mutex,write;//公用信号量,用于互斥
    mutex=1;write=1;//设置初值
    int  readcount//计数,用于记录读者的数目


    读者进程:
    P(mutex);//对readcount互斥
    readcoujt++;//读者数目加一
    if(readcount==1)//第一个读进程
        P(write)//申请使用data资源
    V(mutex)//释放readcount
    reading;
    P(mutex);//对readcount互斥
    readcount--;
    if(readcount==0)//最后一个进程
        V(write);//释放data资源
    V(mutex);//释放readcount    

    写者进程:
    P(write);//申请使用data资源
    writing;
    V(write);//释放data资源

  • 相关阅读:
    BZOJ4240: 有趣的家庭菜园
    BZOJ1509: [NOI2003]逃学的小孩
    BZOJ5301: [Cqoi2018]异或序列
    BZOJ4540: [Hnoi2016]序列
    BZOJ4956: [Wf2017]Secret Chamber at Mount Rushmore
    BZOJ2141: 排队
    BZOJ1833: [ZJOI2010]count 数字计数
    HDU2089: 不要62
    BZOJ5178: [Jsoi2011]棒棒糖
    BZOJ3439: Kpm的MC密码
  • 原文地址:https://www.cnblogs.com/fate-/p/12465993.html
Copyright © 2011-2022 走看看