首页/新闻资讯/正文详情

信号量、PV操作、互斥、同步、死锁举例

发布时间:2026/9/27 5:27:06 来源:云帆数科 栏目:资讯中心
信号量、PV操作、互斥、同步、死锁举例
AI模型Deepseek仅供参考Lets Go!我是分割线互斥例子我们用 Windows 里一个很常见的场景多个程序同时想用麦克风录音。场景你打开 Windows 自带的“录音机”开始录音同时又打开 QQ 想语音通话。但你的电脑只有一个麦克风同一时刻只能被一个程序占用。这时 Windows 就会让其中一个先用另一个等待。这就是信号量、P 操作和 V 操作在起作用。先搞懂三个词- 信号量一个计数器表示某种资源还有几个可用。这里资源是“麦克风”所以信号量初始值设为 1表示麦克风空闲。- P 操作申请资源。做法信号量减 1。如果减完小于 0说明资源不够就排队等待。- V 操作释放资源。做法信号量加 1。如果有人在排队就唤醒一个。一句话P 是申请可能等待V 是释放会唤醒。具体过程1. 录音机先申请麦克风录音机执行 P 操作麦克风信号量从 1 减到 0。减完不小于 0说明麦克风空闲录音机成功占用开始录音。2. QQ 也想用麦克风QQ 执行 P 操作麦克风信号量从 0 减到 -1。减完小于 0说明麦克风已被占用QQ 只能排队等待。3. 录音机录音结束录音机执行 V 操作麦克风信号量从 -1 加回 0。发现有程序在等待QQ于是唤醒 QQ。4. QQ 被唤醒占用麦克风QQ 从等待中醒来发现自己可以用了于是占用麦克风开始语音通话。小白总结- 信号量就是“麦克风还有几个”的计数器一开始是 1。- P 操作我要用麦克风先减 1如果减完不够就等着。- V 操作我用完了加 1并叫下一个等着的人来用。所以在 Windows 里当你看到“麦克风被其他程序占用”的提示时背后就是信号量、P 操作和 V 操作在协调多个程序保证同一时刻只有一个程序能使用麦克风。我是分割线同步例子我们用 Windows 里很常见的 “在线视频缓冲后播放” 作为例子。你在网页或播放器里点开一个视频通常会先看到“正在缓冲…”的圈圈等缓冲够了才开始播放。这就是同步播放必须等缓冲完成。先搞懂三个词- 信号量一个计数器表示某件事有没有完成。这里叫它 S初值是 0表示“缓冲还没完成不能播”。- P 操作申请。把信号量减 1。如果减完小于 0就排队等待。- V 操作通知。把信号量加 1。如果有人在等就把它叫醒。同步步骤1. 准备阶段播放器启动一个“播放线程”准备播放视频。同时定义一个信号量 S 0表示“视频还没缓冲好”。2. 播放线程先等播放线程执行 P(S)。S 从 0 减到 -1小于 0说明缓冲还没完成。于是播放线程进入等待队列暂停运行界面上显示“正在缓冲…”。3. 缓冲线程开始工作缓冲线程从网络不断下载视频数据放进缓冲区。此时播放线程一直在等不会提前播放。4. 缓冲完成发出通知当缓冲区里的数据够播一段时间后缓冲线程执行 V(S)。S 从 -1 加回 0并发现有播放线程正在等待。于是系统唤醒播放线程。5. 播放线程继续执行播放线程被唤醒后从 P(S) 的等待中返回开始从缓冲区取数据播放视频。你看到“正在缓冲…”消失视频开始播放。6. 播放过程中继续同步如果播着播着缓冲区空了播放线程可能再次执行 P(S) 等待缓冲线程继续下载够了再 V(S) 通知。这样播放和缓冲一直协调进行。小白总结- 信号量 S 初值为 0表示“事情还没发生”这里是“视频还没缓冲好”。- P 操作播放线程问“缓冲好了吗”没好就等着。- V 操作缓冲线程说“缓冲好了”然后叫醒播放线程。所以在这个 Windows 在线视频例子里播放线程先 P(S) 等待 → 缓冲线程下载数据 → 缓冲够了 V(S) 通知 → 播放线程被唤醒 → 开始播放。这就是同步一件事必须等另一件事完成完成后通过 V 操作通知等待方通过 P 操作被唤醒。我是分割线死锁例子我们用 Windows 上很常见的 “QQ 和钉钉同时想视频通话” 作为例子。假设你的电脑连接了- 摄像头同一时刻只能被一个程序使用。- 麦克风同一时刻也只能被一个程序使用。现在发生下面的事- QQ 先启动了视频通话占用了摄像头。然后它想再占用麦克风但麦克风正被钉钉占着于是 QQ 只能等。- 钉钉 也启动了视频会议先占用了麦克风。然后它想再占用摄像头但摄像头正被 QQ 占着于是钉钉也只能等。- 两个程序都不肯先释放自己已经占用的设备又都在等对方释放于是双双卡死谁也无法继续视频通话。这就是 死锁。下面看看死锁发生的四个必要条件在这个例子里怎样一一对应1. 互斥条件摄像头和麦克风都是独占设备同一时刻只能被一个程序使用。QQ 占了摄像头钉钉就不能再用摄像头钉钉占了麦克风QQ 就不能再用麦克风。2. 保持与等待条件QQ 已经持有摄像头同时又在等待麦克风。钉钉 已经持有麦克风同时又在等待摄像头。它们都是“拿着一个还想要另一个”。3. 不可抢占条件QQ 已经占用的摄像头不能被钉钉强行抢走。钉钉已经占用的麦克风也不能被 QQ 强行抢走。设备只能由占用它的程序自己释放别人不能抢。4. 循环等待条件QQ 在等钉钉释放麦克风钉钉在等 QQ 释放摄像头。等待关系形成了一个圈QQ → 等麦克风 → 被钉钉持有 → 钉钉等摄像头 → 被 QQ 持有 → 回到 QQ。这就是循环等待。小白总结在 Windows 里两个程序各占一个设备又都想用对方的设备就会形成死锁。死锁必须同时满足这四个条件互斥、保持与等待、不可抢占、循环等待。只要打破其中任意一个死锁就不会发生。比如规定所有程序都先申请摄像头、再申请麦克风就不会出现循环等待了。

相关推荐

PCAN-View加载DBC文件的高级用法:信号监控、报文注入与离线复盘
PCAN-View加载DBC文件的高级用法:信号监控、报文注入与离线复盘

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 5:27:00

CAN报文解析:Intel格式与Motorola格式的位级排列与DBC实战
CAN报文解析:Intel格式与Motorola格式的位级排列与DBC实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 5:26:54

不会代码也能搞韦恩图在线制作网站?3个免费工具实测与避坑指南
不会代码也能搞韦恩图在线制作网站?3个免费工具实测与避坑指南

不会代码也能搞韦恩图在线制作网站?3个免费工具实测与避坑指南 想做个韦恩图在线制作网站,却卡在“不会代码”这道坎上?这种焦虑我太懂了。很多运营或产品同事,手里有需求,心里有方案,但一听到“前端开发”“服务器部署”就头大,总觉得必须得找外包团… · 2026/9/27 5:26:42

OpenCV C++图像处理六步链路:从平滑增强到面积测量实战
OpenCV C++图像处理六步链路:从平滑增强到面积测量实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 6:09:29

树莓派OV5647摄像头CSI排线连接与配置避坑指南
树莓派OV5647摄像头CSI排线连接与配置避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 6:09:23

快速做网站详情页还怕没流量?这份保姆级建站教程救急
快速做网站详情页还怕没流量?这份保姆级建站教程救急

快速做网站详情页还怕没流量?这份保姆级建站教程救急 网站做好了没人访问,是不是让你头大如斗?别慌,很多前端新手都卡在这一步。其实不是代码写得不够炫,而是没懂搜索引擎怎么“看”你的页面。今天这篇保姆级建站教程,专门教你怎么快速做网站详情页,让… · 2026/9/27 6:09:17

ROS2 Humble Nav2 从零搭建:A* 全局规划与 DWA 局部避障实战
ROS2 Humble Nav2 从零搭建:A* 全局规划与 DWA 局部避障实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 6:09:17

3步搞定家乡网页模板,保姆级建站教程让流量翻倍
3步搞定家乡网页模板,保姆级建站教程让流量翻倍

3步搞定家乡网页模板,保姆级建站教程让流量翻倍 网站做好了没人访问,是不是你的常态?别慌,我见过太多人花几千块做个“家乡网页模板”,上线后日UV只有个位数。今天这篇保姆级建站教程,不聊虚的,直接教你怎么从0到1,把一个冷清的家乡主题站,变成… · 2026/9/27 6:09:17

云智变AI开题报告:为什么你的开题答辩像一场“审讯”,而别人的像一场“讨论”?
云智变AI开题报告:为什么你的开题答辩像一场“审讯”,而别人的像一场“讨论”?

云智变AI官网:www.yunzhibian.cn | 微信公众号搜一搜:云智变AI学术 开题答辩现场有两种人。 第一种人站上去,PPT翻到第三页,评委开始皱眉:“你这个研究问题到底是什么?”“你说的这个变量怎么… · 2026/9/27 6:08:58

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码