一、问题描述
要求:
1、允许多个读者可以同时对文件执行读操作。
2、只允许一个写者往文件中写信息。
3、任一写者在完成写操作之前不允许其他读者或写者工作。
4、写者执行写操作前,应让已有的读者和写者全部退出。
二、问题分析
扫描二维码关注公众号,回复:
7307389 查看本文章
![](/qrcode.jpg)
读者写者问题最核心的问题是如何处理多个读者可以同时对文件的读操作。
三、如何实现
semaphore rw = 1; //实现对文件的互斥访问 int count = 0; semaphore mutex = 1;//实现对count变量的互斥访问 int i = 0; writer(){ while(1){ P(rw); //写之前“加锁” 写文件 V(rw); //写之后“解锁” } } reader (){ while(1){ P(mutex); //各读进程互斥访问count if(count==0) //第一个读进程负责“加锁” { P(rw); } count++; //访问文件的进程数+1 V(mutex); 读文件 P(mutex); //各读进程互斥访问count count--; //访问文件的进程数-1 if(count==0) //最后一个读进程负责“解锁” { V(rw); } V(mutex); } }