目录
1. Reader-Writer问题
多个Reader进程,多个Writer进程,共享文件F
允许多个Reader进程同时读文件
不允许任何一个Writer进程与其他进程同时访问(读或写)文件
写出 Reader-Writer 问题的改进算法
避免由于不断有 Reader 出现而使得 Writer 无限期等待
int rc = 0; //reader的个数
Semaphore_t mutex = 1; //互斥对 rc 的访问
Semaphore_t f = 1; // 互斥对文件 F 的访问
Semaphore_t writer_wait = 1; // 当前是否有 writer 正在等待
void reader() {
while (1) {
P(&writer_wait)
P(&mutex); // 互斥对 rc 的访问
rc++;
if (rc == 1) P(&f);//第一个读者
V(&mutex);
V(&writer_wait);
read_file(); //读文件 F
P(&mutex);
rc--;
if (rc == 0) V(&f);//最后一个读者
V(&mutex);
use_data();
}
}
void writer() {
while (1) {
form_data();//准备数据
P(&writer_wait);
P(&f);
write_file();//写文件
V(&f);
V(&writer_wait);
}
}