码迷,mamicode.com
首页 > 系统相关 > 详细

进程同步——读者、写者问题

时间:2019-12-07 19:41:06      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:进程同步   一个   允许   int   多个   要求   write   signal   数据文件   

一个数据文件可以被多个进程所共享,把只要求读文件的进程成为“Reader进程”,其他进程称为“Writer进程”,允许多个进程读,但是不允许一个Writer进程和其他进程一起读或者写。

读者:

在读者问题中,把readcount当成了互斥信号量,在执行readcount减减或加加之前都要指向p操作。

semaphore rmutex=1,wmutex=1;
//rmutex信号量保证多个Reader进程对互斥资源的访问,这里把readcount当作了互斥资源 
//wmutex信号量保证读写进程的互斥  
int readcount=0;//正在读的进程数目 
void reader(){
    while(1){
        wait(rmutex);
        if(readercount==0)
        wait(wmutex);//只有没有进程读的时候 ,执行 p 操作,不允许其他进程写 ,
                     //因为信号量为1,执行 p操作后信号量的值变为0 
        readcounter++;
        signal(rmutex);
        ...
        ...
        wait(rmutex);
        readcount--;
        if(readcount==0)//表示是最后一个读者,没有读者占用了 
        signal(wmutex); 
        signal(rmutex);
    }
}

写者:

semaphore wmutex=1;//wmutex信号量保证读写进程的互斥  
void Writer(){
    while(1){
        wait(wmutex);//检查是否有人读或写
        写操作;
        signal(wmutex); 
    }
} 

 

 

 

 

 

进程同步——读者、写者问题

标签:进程同步   一个   允许   int   多个   要求   write   signal   数据文件   

原文地址:https://www.cnblogs.com/zhai1997/p/12002857.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!