操作系统--读者和写者问题
作者:互联网
简介
实现读者和写者问题是一个经典的并发程序设计问题,是经常出现的一种同步问题。所谓读者写者问题,是指保证一个写进程必须与其他进程互斥地访问共享对象的同步问题
因此要求:
①允许多个读者可以同时对文件执行读操作
②只允许一个写者往文件中写信息
③任一写者在完成写操作之前不允许其他读者或写者工作
④写者执行写操作前,应让已有的读者和写者全部退出
实现
分析
关系分析
读者和写者是互斥的,写者和写者也是互斥的
读者和读者不存在互斥问题
整理思路。两个进程,即读者和写者
写者是比较简单的,它和任何进程互斥,用互斥信号量的 P操作、V操作 即可解决。
读者的问题比较复杂,它必须实现与写者互斥的同时还要实现与其他读者的同步,因此,仅仅简单的一对 P操作、V操作 是无法解决的。那么,在这里用到了一个计数器,用它来判断当前是否有读者读文件。当有读者的时候写者是无法写文件的,此时读者会一直占用文件,当没有读者的时候写者才可以写文件。同时这里不同读者对计数器的访问也应该是互斥的
信号量设置
首先设置信号量 count 为计数器,用来记录当前读者数量,初值为 0
设置 mutex 为互斥信号量,用于保护更新 count 变量时的互斥
设置互斥信号量 rw 用于保证读者和写者的互斥访问
读者优先算法
写者优先算法
标签:文件,操作系统,--,写者,信号量,互斥,读者,操作 来源: https://www.cnblogs.com/52-IT-y/p/16548940.html