**
读写者
**
只要求读文件的进程称为reader进程,其他进程称为writer进程。
允许多个进程同时读一个共享对象,但不允许一个writer进程和其他reader进程同时或writer进程同时访问一个共享对象。
简单来说,读写者问题是保证一个writer进程必须与其他进程互斥的访问共享对象的同步问题。
三句话来说,就是:
读读共享;写写互斥;读写互斥
读者-写者问题是一个经典的并发程序设计问题,是经常出现的一个同步问题。
如果读者来:
无读者、写者,新读者可以读
有写者等待,但有其他读者正在读,新读者可以读
有写者写,新读者等
如果写者来:
无读者,新写者可以写
有读者,新写者等待
有其他写者,新写者等待
现在开始分析读写者的
解决方案
读进程优先**
无需修改就可用于多个读进程和写进程的情况。写进程非常简单,信号量用于实施互斥,只要一个写进程正在访问共享数据区,其他的写进程和读进程都不能访问它。读进程也使用信号量实施互斥,但是,为允许多个读进程,当没有读进程正在读时,第-一个试图读的读进程需要在信号量上等待。当至少已经有一个读进程在读时,随后的读进程无需等待,可以直接进入。全局变量count用于记录读进程的数目,信号量mutex用于确保count被正确地更新。
int count=0; //用于记录当前的读者数量
semaphore mutex=1; //用于保护更新count变量时的互斥
semaphore rw=1; //用于保证读者和写者互斥地访问文件
writer () {
//写者进程
while (1){
P(rw