一、问题描述
二、问题分析
1. 读与写、写与写 是绝对不会同时进行的,读与读可以
设置互斥信号量 wmutex,初值为1。
2. 记录正在读的进程数目
设置整型变量 readcount。
3. Reader 进程之间也需要互斥访问 readcount 变量
由于 readcount 也是一个可被多个 Reader 进程访问的临界资源,所以也应该为它设置一个互斥信号量 rmutex,初值为1。
4. 对于 Reader,检测到 readcount ≠ 0 时,则直接可以进行读操作
readcount ≠ 0 的话,说明此时一定有一个或多个Reader在进行读操作(有读者说明此时一定没有写者在写),因为允许多个Reader一起读,所以直接开始读就好了。
5. 对于 Reader,检测到 readcount = 0 时,还要判断是否有 Writer 在写
readcount = 0 说明此时没有读进程,那么此时可能有两种情况:
① 文件是空闲的,没有读也没有写
那么直接读就好了
② 文件正在被写
那就需要等待,直到写操作完成,才能读
利用 wait(wmutex) 来进行判断。