生产者与读写问题

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

问题描述:

 

 

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

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

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

这是互斥关系

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

这是同步关系

使用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资源

原文地址:https://www.cnblogs.com/fate-/p/12465993.html