计算机操作系统19,20
第十九课读者-写者问题Readers-Writers Problem一、先来看一个生活例子假设图书馆里有一本珍贵古籍。很多人都想看。还有管理员负责修改。例如学生A阅读 学生B阅读 学生C阅读 管理员修改内容请问什么时候可以一起情况一学生A正在看。学生B也来看。有没有问题没有。因为大家只是看。没有修改。所以可以一起。情况二管理员开始修改。学生还能看吗不能。否则学生可能看到一半旧内容。一半新内容。数据就错了。所以规则非常简单。读可以共享写必须独占。这是整章最重要的一句话。二、操作系统中的对应关系图书馆对应共享数据。例如数据库 文件 缓存 共享变量读者对应读取数据写者对应修改数据于是得到两条规则。第一条多个读者。可以同时读。例如A读 B读 C读没有问题。第二条写者写的时候。任何别人都不能进去。包括读者。也包括写者。三、为什么不能边写边读假设银行余额100写者正在修改100 ↓ 80刚改一半。读者读取。可能得到错误数据。所以写的时候必须独占。四、需要几个变量和生产者消费者一样。这里也需要信号量。最经典两个。第一个mutex 1作用保护读者数量。为什么因为多个读者同时修改readcount会冲突。第二个rw 1作用真正保护共享数据。任何写者必须获得它。还有一个普通变量。readcount 0表示现在有几个读者。五、读者怎么进入假设A开始读。第一步。修改读者人数。是不是需要互斥所以P(mutex);人数增加。readcount例如0 ↓ 1说明我是第一个读者。如果是第一个。那么要阻止写者。于是P(rw);拿到写锁。然后释放mutex因为别人可以继续统计人数。于是多个读者来了。第二个readcount 1 ↓ 2注意。不是第一个。所以不用再P(rw)。直接进去。于是很多读者一起读。六、读者退出读完。第一步。人数减少。2 ↓ 1如果还有读者。不用管。最后一个读者出来。例如1 ↓ 0说明没人读了。于是释放V(rw);写者终于可以写。七、写者怎么进入写者简单。第一步。申请P(rw);如果没人读。没人写。进去。开始写。修改数据结束。释放。V(rw);完成。八、完整流程读者P(mutex);readcount;if(readcount1)P(rw);V(mutex);读数据;P(mutex);readcount--;if(readcount0)V(rw);V(mutex);写者P(rw);写数据;V(rw);九、为什么第一个读者加锁很多同学第一次这里最迷。来看。假设已经三个读者。是不是共享读那为什么只有第一个执行P(rw)因为只需要第一个把门锁上。后面的读者。直接进去。最后一个出来。负责开门。是不是很像电影院第一个进去锁门。最后一个出来开门。十、读者优先刚才这种算法。叫读者优先Reader Preference为什么假设一直有人读。A ↓ B ↓ C ↓ D ↓ E写者一直等。是不是可能永远写不了这叫写者饥饿Writer Starvation十一、怎么办后来提出写者优先。如果写者来了。新的读者不能继续进去。等写完。再继续读。于是写者不会一直等待。现代数据库大多数采用公平策略。既不是读者优先。也不是写者优先。谁等得久。谁先。十二、和前面的区别来看三个经典题。生产者消费者关注空 满哲学家关注死锁读者写者关注共享读 独占写所以重点完全不同。十三、考试最喜欢问★★★★★问为什么多个读者可以一起答案因为不修改数据。问为什么写者必须独占答案避免数据不一致。问为什么第一个读者要P(rw)答案阻止写者。问为什么最后一个读者V(rw)答案允许写者进入。十四、一张图理解读者A ↓ 第一个 ↓ 是 ↓ P(rw) ↓ 一起读 ──────────── 读者B ↓ 不是第一个 ↓ 直接读 ──────────── 最后一个读者 ↓ V(rw) ↓ 写者进入十五、本课重点★★★★★必须记住读共享写独占。必须知道三个变量mutex rw readcount必须知道第一个锁门。最后开门。必须知道读者优先可能导致写者饥饿。十六、同步章节总结★★★★★到这里我们已经学完了操作系统同步的四大经典模型问题核心矛盾关键词生产者-消费者缓冲区空/满empty、full、mutex哲学家进餐多资源竞争死锁读者-写者共享读、独占写readcount、rw临界区问题互斥访问临界资源你会发现这些模型虽然场景不同但本质都是在回答一个问题如何让多个线程安全、高效地共享资源。第二十课死锁Deadlock这一课目标学会什么是死锁、为什么会发生死锁以及死锁的四个必要条件。一、什么是死锁教材定义死锁是指多个进程因竞争资源而造成的一种互相等待的现象。这句话比较绕我们换成人话大家都在等别人放资源但谁都不放于是所有人都卡住了。记住这个关键词互相等待。二、生活中的例子假设有两支笔A笔 B笔有两个同学。小明已经拿到了A笔现在想拿B笔但是B笔在小红手里。与此同时。小红已经拿到了B笔她又想拿A笔于是小明 拿A 等B ↓ 小红 拿B 等A两个人都在等。没人愿意放下。结果永远卡住。这就是死锁。三、操作系统中的例子假设系统有两个资源。打印机 扫描仪进程A已经占有打印机。等待扫描仪。进程B已经占有扫描仪。等待打印机。于是A 打印机 ↓ 等扫描仪 ────────── B 扫描仪 ↓ 等打印机谁也继续不了。系统进入死锁。四、死锁与饥饿有什么区别很多同学最容易混。来看。死锁例如A 等 B B 等 A大家全部停住。谁也不能继续。饥饿Starvation例如一直有新的高优先级进程。低优先级进程一直排队。但是理论上如果前面的都执行完它最终还是有机会运行。只是等得非常久。对比死锁饥饿相互等待长时间得不到资源多个进程都停住至少有一个进程还能继续运行系统可能完全停滞系统仍在运行一句话死锁是大家都走不了饥饿是只有我一直没轮到。五、死锁为什么会发生我们前面其实已经学过。只有下面四个条件同时成立。才会发生死锁。条件①互斥资源一次只能一个进程使用。例如打印机。一个人打印。别人只能等。条件②请求并保持已经拿着一个资源。继续申请新的。例如已经 拿着打印机 ↓ 继续申请扫描仪条件③不可剥夺已经得到资源。别人不能强制拿走。只能自己释放。条件④循环等待形成等待环。例如A ↓ 等B ↓ B ↓ 等C ↓ C ↓ 等A形成一个圈。六、为什么必须四个都满足举个例子。如果没有循环等待。例如A ↓ 等B ↓ B ↓ 等CC没有等任何人。那么C完成。释放资源。B继续。再释放。最后A继续。是不是不会死锁所以少一个条件。都不会真正形成死锁。七、资源分配图★★★★★教材非常喜欢画图。我们必须学。两种节点圆圈表示进程例如○P1 ○P2方框表示资源例如□R1 □R2两种箭头进程 → 资源表示申请资源例如P1 ↓ R1说明P1正在申请R1。资源 → 进程表示已经分配例如R1 ↓ P1说明R1已经给了P1。八、怎么看有没有死锁例如画出下面资源分配图。P1 → R2 R1 → P1 P2 → R1 R2 → P2画出来○P1 → □R2 ↑ │ │ ↓ □R1 ← ○P2是不是形成一个环如果每种资源只有一个实例。那么有环 死锁。这是考试非常喜欢考的结论。注意如果资源有多个实例仅仅有环并不一定死锁需要进一步分析。九、死锁有哪些处理方法教材一般分四类。这里只先认识名字后面几课详细展开。方法思想预防Prevention破坏四个必要条件之一避免Avoidance提前判断避免进入危险状态检测Detection允许死锁发生再检测出来解除Recovery检测后终止进程或回收资源可以把它们理解成四种不同策略。十、一个形象比喻假设十字路口。四辆车都进入路口。每辆车都堵住别人。结果东 等 南 等 西 等 北 等 东这就是现实中的死锁。交警怎么办有四种办法预防红绿灯设计好不让这种情况出现。避免发现快堵住了提前拦下一辆车。检测先让车走堵了再发现。解除拖走一辆车恢复交通。这四种方法对应操作系统处理死锁的四种策略。十一、本课重点★★★★★必须掌握死锁定义多个进程互相等待资源导致都无法继续执行。四个必要条件条件记忆关键词互斥一次一个请求并保持拿着等不可剥夺不能抢循环等待等成环口诀一次一个拿着等不能抢等成环。死锁与饥饿一定要会区分。死锁大家都停。饥饿只是有人一直没机会。资源分配图一定要会圆圈进程方框资源进程→资源申请资源→进程分配对于每种资源只有一个实例的情况资源分配图有环 ⇔ 发生死锁。 课堂练习请自己思考①为什么如果允许资源被强行抢走。就不会发生死锁提示四个必要条件中的哪一个被破坏了②为什么如果所有进程必须一次申请全部资源。也能避免死锁提示又破坏了哪一个必要条件③下面哪一种属于死锁A.A 等 B。B 等 A。B.低优先级一直排不到CPU。 学习进度到目前为止我们已经完成操作系统 │ ├── 操作系统基础 ✅ ├── 进程 ✅ ├── CPU调度 ✅ ├── 线程 ✅ ├── 同步与互斥 ✅ └── 死锁基础 ✅下一课预告408 最难算法之一下一课进入第二十一课死锁预防与死锁避免你将学会如何通过破坏四个必要条件来预防死锁。什么是安全状态Safe State和危险状态Unsafe State。为什么危险状态不等于死锁。**银行家算法Banker’s Algorithm**的核心思想。银行家算法是很多同学觉得最难的内容但我们会从最简单的生活例子开始一步步推导让你真正理解而不是死记硬背。很好这一课非常重要。前面我们已经把操作系统的主要章节全部学完了操作系统 ├── 进程管理 ├── 内存管理 ├── 文件系统 ├── I/O设备管理 └── 保护与安全但是很多同学学完操作系统后会出现一个问题“每个知识点都会但是不知道它们之间有什么关系。”所以今天我们把整个操作系统从零串成一套完整体系。

相关新闻

想进大厂做安全工程师,这份包含代码审计与应急响应的进阶路线图

想进大厂做安全工程师,这份包含代码审计与应急响应的进阶路线图

突破工具依赖:从执行者到架构师的思维跃迁很多刚入行的安全工程师容易陷入一种“工具崇拜”的误区,认为熟练掌握 Burp Suite、Sqlmap 或 Nessus 就能胜任所有工作。然而,当你试图从一线工程师向安全架构师或管理层跃迁时,会发现单…

2026/8/7 1:18:55 阅读更多 →
情侣互助厨房小程序开发实战与优化技巧

情侣互助厨房小程序开发实战与优化技巧

1. 项目概述:情侣互助厨房小程序的设计初衷去年帮学弟调试毕业设计时,发现一个有趣现象:校园周边出租屋的情侣们经常为"今晚谁做饭"爆发争执。这个看似琐碎的生活痛点,恰恰是技术可以巧妙解决的场景。我们设计的这款微信…

2026/8/7 1:17:55 阅读更多 →
终极小说下载神器:一键保存200+网站小说到本地

终极小说下载神器:一键保存200+网站小说到本地

终极小说下载神器:一键保存200网站小说到本地 【免费下载链接】novel-downloader 一个可扩展的通用型小说下载器。 项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader 你是否担心追更的小说突然下架?是否想要离线阅读自己付费购买的…

2026/8/7 1:17:55 阅读更多 →

最新新闻

2026年靠谱pdf拆分网站盘点:7款在线合并与拆分工具横评

2026年靠谱pdf拆分网站盘点:7款在线合并与拆分工具横评

八月的午后,空调呼呼转着,我盯着桌面上散落的十七份报销材料发愁。财务要求按时间顺序把发票、审批单、合同片段合并成一份完整的PDF,可光是把这些扫描件按日期排好就花了半小时,中间还插了两份横版的表格。我需要一个能在线拆分又…

2026/8/7 2:09:18 阅读更多 →
2026年PDF拆分成一页一页工具盘点:七款合并与拆分方案怎么选

2026年PDF拆分成一页一页工具盘点:七款合并与拆分方案怎么选

上个月整理投标材料,几十份 PDF 需要按目录重新组页,其中几份还得拆成单页分别插入不同章节。我先是手动一页页另存,搞到第三份文件时页码就对不上了,书签全乱,只好从头再来。折腾到晚上十一点,同事扔过来一…

2026/8/7 2:09:18 阅读更多 →
技术沟通新范式:用隐喻思维提升API设计、监控告警与文档质量

技术沟通新范式:用隐喻思维提升API设计、监控告警与文档质量

1. 这篇文章真正要解决的问题当你在搜索引擎里看到“墨西哥拉格像四百只兔子在嘴里狂奔”这个标题时,第一反应是什么?是某种神秘的墨西哥啤酒广告,还是一个关于味觉的夸张比喻?对于技术开发者而言,这个看似无厘头的标题…

2026/8/7 2:09:18 阅读更多 →
3分钟解锁加密音乐:Unlock-Music浏览器本地解密终极指南

3分钟解锁加密音乐:Unlock-Music浏览器本地解密终极指南

3分钟解锁加密音乐:Unlock-Music浏览器本地解密终极指南 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: htt…

2026/8/7 2:09:18 阅读更多 →
2026年pdf拆分工具七款实测盘点:从免费在线到电脑软件,哪几款更顺手

2026年pdf拆分工具七款实测盘点:从免费在线到电脑软件,哪几款更顺手

上个月整理材料时,我对着电脑屏幕发了好一阵呆。手头是一份七十多页的扫描版合同归档件,前二十页属于A项目,中间三十页归B项目,最后十几页又是另一份补充协议——要分别拆出来归档,还要把其中几页跟另一份补充说明合并…

2026/8/7 2:09:18 阅读更多 →
MyBatis大字段查询性能陷阱与优化实践

MyBatis大字段查询性能陷阱与优化实践

1. 问题现象:一个被忽视的性能陷阱那天下午,运维突然报警线上服务响应时间飙升,我打开监控一看,几个核心接口的RT(响应时间)从平时的200ms直接飙到了1秒以上。紧急排查后发现,问题出在一个看似无…

2026/8/7 2:08:18 阅读更多 →

日新闻

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 想要将Android手机屏幕完美投射到电脑上,享受大屏操作的自…

2026/8/7 0:00:19 阅读更多 →
如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南 【免费下载链接】tom-select Tom Select is a lightweight (~16kb gzipped) hybrid of a textbox and select box. Forked from selectize.js to provide a framework agnostic autocomplete widget wi…

2026/8/7 0:00:19 阅读更多 →
5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件 【免费下载链接】nsz NSZ - Homebrew compatible NSP/XCI compressor/decompressor 项目地址: https://gitcode.com/gh_mirrors/ns/nsz 你是否在为Nintendo Switch游戏文件占用大量存储…

2026/8/7 0:00:19 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/6 22:02:27 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/6 22:02:28 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →