Skip to content

Latest commit

 

History

History
38 lines (24 loc) · 1.59 KB

File metadata and controls

38 lines (24 loc) · 1.59 KB

2.3_9_读者-写者问题

问题描述

image-20210610110508059

  • 读者与写者两组并发进程,共享一个文件
  • 当两个或两个以上读进程同时访问共享数据时不会产生副作用,但是某个写进程和其他进程(读进程或写进程)同时访问共享数据时则可能导致数据不一致的错误
    1. 允许多个读者可以同时对文件执行读操作
    2. 只允许一个写进程往文件中写信息
    3. 任一写者在完成操作之前不允许其他读者或写者工作
    4. 写者执行写操作前,应让已有的读者和写着全部退出
  • 简而言之
    1. 允许多个读者同时访问
    2. 写者与其他任何进程互斥

2.问题分析

image-20210610112636799

  • 关键是想到用count变量来记录当前有几个读进程在访问文件

3.如何实现

image-20210610112758135

  • 读者优先,只要有读者在读文件,写进程就会被阻塞
  • 写进程可能会“饥饿”

image-20210610112914478

  • 通过增加一个信号量w,实现“写者优先”,或者称为“读写公平法”

4.总结

image-20210610113042807

  • 巧妙~:)