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

Posted zhai1997

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程同步——读者写者问题相关的知识,希望对你有一定的参考价值。

一个数据文件可以被多个进程所共享,把只要求读文件的进程成为“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); 
    }
} 

 

 

 

 

 

以上是关于进程同步——读者写者问题的主要内容,如果未能解决你的问题,请参考以下文章

Linux练习_线程练习_读者写者问题

经典进程的同步问题(生产者--消费者问题哲学家进餐问题读者--写者问题)

“读者-写者问题”的写者优先算法实现

操作系统 | 经典进程的同步问题(生产者--消费者问题哲学家进餐问题读者--写者问题)

用信号量和读写锁解决读者写者问题

线程同步互斥锁和读写锁的区别和各自适用场景