进程同步——读者写者问题
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); } }
以上是关于进程同步——读者写者问题的主要内容,如果未能解决你的问题,请参考以下文章
经典进程的同步问题(生产者--消费者问题哲学家进餐问题读者--写者问题)