简介
实现读者和写者问题是一个经典的并发程序设计问题,是经常出现的一种同步问题。所谓读者写者问题,是指保证一个写进程必须与其他进程互斥地访问共享对象的同步问题
因此要求:
①允许多个读者可以同时对文件执行读操作
②只允许一个写者往文件中写信息
③任一写者在完成写操作之前不允许其他读者或写者工作
④写者执行写操作前,应让已有的读者和写者全部退出
实现
分析
关系分析
读者和写者是互斥的,写者和写者也是互斥的
读者和读者不存在互斥问题
整理思路。两个进程,即读者和写者
写者是比较简单的,它和任何进程互斥,用互斥信号量的 P操作、V操作 即可解决。
读者的问题比较复杂,它必须实现与写者互斥的同时还要实现与其他读者的同步,因此,仅仅简单的一对 P操作、V操作 是无法解决的。那么,在这里用到了一个计数器,用它来判断当前是否有读者读文件。当有读者的时候写者是无法写文件的,此时读者会一直占用文件,当没有读者的时候写者才可以写文件。同时这里不同读者对计数器的访问也应该是互斥的
信号量设置
首先设置信号量 count 为计数器,用来记录当前读者数量,初值为 0
设置 mutex 为互斥信号量,用于保护更新 count 变量时的互斥
设置互斥信号量 rw 用于保证读者和写者的互斥访问
读者优先算法
写者优先算法
标签:文件,操作系统,--,写者,信号量,互斥,读者,操作 来源: https://www.cnblogs.com/52-IT-y/p/16548940.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。