操作系统--读者和写者问题
简介
实现读者和写者问题是一个经典的并发程序设计问题,是经常出现的一种同步问题。所谓读者写者问题,是指保证一个写进程必须与其他进程互斥地访问共享对象的同步问题
因此要求:
①允许多个读者可以同时对文件执行读操作
②只允许一个写者往文件中写信息
③任一写者在完成写操作之前不允许其他读者或写者工作
④写者执行写操作前,应让已有的读者和写者全部退出
实现
分析
关系分析
读者和写者是互斥的,写者和写者也是互斥的
读者和读者不存在互斥问题
整理思路。两个进程,即读者和写者
写者是比较简单的,它和任何进程互斥,用互斥信号量的 P操作、V操作 即可解决。
读者的问题比较复杂,它必须实现与写者互斥的同时还要实现与其他读者的同步,因此,仅仅简单的一对 P操作、V操作 是无法解决的。那么,在这里用到了一个计数器,用它来判断当前是否有读者读文件。当有读者的时候写者是无法写文件的,此时读者会一直占用文件,当没有读者的时候写者才可以写文件。同时这里不同读者对计数器的访问也应该是互斥的
信号量设置
首先设置信号量 count 为计数器,用来记录当前读者数量,初值为 0
设置 mutex 为互斥信号量,用于保护更新 count 变量时的互斥
设置互斥信号量 rw 用于保证读者和写者的互斥访问
读者优先算法
写者优先算法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南