当前位置: 首页 > article >正文

别再死记硬背了!用‘阅览室占座’和‘独木桥过河’两个生活例子,彻底搞懂操作系统的P、V操作

从生活场景秒懂操作系统用阅览室和独木桥破解P、V操作记得大学时第一次在图书馆抢座好不容易找到空位却发现桌上放着已占的纸条——这种资源争夺的混乱场景恰如操作系统中的进程竞争。而管理员后来推出的座位登记系统本质上就是一套精妙的P、V操作机制。今天我们就用两个生活化案例带你看透操作系统最烧脑的同步互斥原理。1. 阅览室座位管理信号量的现实映射去年学校图书馆改造后新增了智能座位管理系统。每位同学进入时需要在终端刷卡登记系统显示剩余座位数离开时再次刷卡释放座位。这个看似简单的流程完美复刻了信号量的核心逻辑。1.1 资源计数器剩余座位信号量定义信号量seats100表示初始座位数其运作规律有三正数值直接反映可用资源量如seats85表示剩余15个座位零值临界点当seats0时触发资源耗尽预警负数值绝对值表示等待队列长度如seats-3表示3人在等位对应的P操作wait伪代码实现void wait(int *seats) { (*seats)--; if (*seats 0) { block(); // 进程进入等待队列 } }1.2 互斥锁登记表的保护机制登记表作为共享资源需要防止多人同时修改。设置互斥信号量mutex1其工作模式如下操作阶段进程A进程B初始状态mutex1mutex1请求登记wait(mutex)成功wait(mutex)阻塞完成登记signal(mutex)仍处于阻塞状态--获得mutex继续执行关键提示互斥信号量的值域只能是0或1而资源信号量可以大于12. 独木桥过河双向通行中的同步艺术山区徒步时遇到的独木桥场景更复杂桥面一次只容一人通过但需支持双向通行。这需要组合使用多种同步机制2.1 基础版单方向通行控制初始方案设置两个信号量east_ready1东向西通行许可west_ready1西向东通行许可对应的进程控制逻辑// 东向西行走进程 void walk_east() { wait(east_ready); cross_bridge(); // 过桥临界区 signal(east_ready); } // 西向东行走进程 void walk_west() { wait(west_ready); cross_bridge(); // 过桥临界区 signal(west_ready); }但这种实现存在明显缺陷——当连续同方向行人过桥时反向行人可能长期饥饿。2.2 优化版公平调度策略引入计数器与二级互斥锁int east_count 0, west_count 0; semaphore mutex 1; // 全局互斥锁 semaphore east_mutex 1; // 东向计数器锁 semaphore west_mutex 1; // 西向计数器锁 // 东向西增强版 void walk_east_enhanced() { wait(east_mutex); if (east_count 0) wait(mutex); east_count; signal(east_mutex); cross_bridge(); wait(east_mutex); east_count--; if (east_count 0) signal(mutex); signal(east_mutex); }这种方案实现了同方向行人可连续通过计数器机制保证反向行人最终能获得通行权全局互斥锁释放避免死锁严格的锁获取顺序3. 从生活到代码P、V操作通用模板通过上述案例我们可以提炼出解决同步问题的通用模式3.1 资源分配类问题适用场景打印机使用、数据库连接池等# 初始化 resource_sem Semaphore(MAX_RESOURCES) mutex Semaphore(1) def process(): wait(resource_sem) # 申请资源 wait(mutex) # 进入临界区 # 使用资源... signal(mutex) # 退出临界区 signal(resource_sem) # 释放资源3.2 生产者-消费者问题适用场景消息队列、缓冲区管理等// 初始化 Semaphore empty new Semaphore(BUFFER_SIZE); Semaphore full new Semaphore(0); Semaphore mutex new Semaphore(1); void producer() { while(true) { empty.wait(); // 检查空位 mutex.wait(); // 生产数据... mutex.signal(); full.signal(); // 增加可用数据 } }4. 避坑指南P、V操作常见误区在实际工程中这些陷阱需要特别注意4.1 死锁四必要条件通过独木桥案例我们可以验证死锁产生的必要条件互斥条件桥面一次只容一人√占有并等待行人占据桥面同时等待对方让步√非抢占条件系统不能强制收回通行权√循环等待东西两侧行人互相等待√防御措施破坏任一条件即可预防死锁如引入超时机制破坏非抢占条件4.2 信号量使用黄金法则初始化原则资源信号量初始值可用资源总数互斥信号量初始值1操作顺序先申请资源信号量再获取互斥锁释放时顺序相反错误处理if (wait(sem) FAILURE) { // 处理超时或错误 return ERROR_CODE; }在Linux内核中信号量实现还包含调试信息struct semaphore { raw_spinlock_t lock; unsigned int count; struct list_head wait_list; };5. 现代演进从信号量到RCU虽然P、V操作是同步基础但现代系统发展出更高效的机制。比如Linux内核的RCURead-Copy-Update技术通过以下方式优化读写同步读者无锁读取操作不需要获取锁写者协作写入时创建副本原子替换指针延迟回收确保没有读者后再释放旧数据这种设计使得读操作极其高效特别适合读多写少的场景如路由表更新。

相关文章:

别再死记硬背了!用‘阅览室占座’和‘独木桥过河’两个生活例子,彻底搞懂操作系统的P、V操作

从生活场景秒懂操作系统:用阅览室和独木桥破解P、V操作 记得大学时第一次在图书馆抢座,好不容易找到空位却发现桌上放着"已占"的纸条——这种资源争夺的混乱场景,恰如操作系统中的进程竞争。而管理员后来推出的座位登记系统&#x…...

C++计算直线倾斜角与方位角

要计算一条直线的倾斜角(与X轴正方向的夹角)或方位角(与正北方向的顺时针夹角),核心在于根据直线上的两点坐标进行数学计算。以下是具体的数学原理和C实现。 一、核心数学公式 1. 倾斜角(与X轴夹角&#…...

【实战】RuoYi-Vue开发环境一站式部署:从零到一启动前后端分离项目

1. 环境准备:从零搭建基础组件 刚接触RuoYi-Vue时,最头疼的就是环境搭建。记得我第一次部署时,光是处理各种依赖冲突就花了整整两天。现在把踩坑经验总结成这份保姆级教程,帮你半小时搞定全套环境。 JDK安装是第一个门槛。推荐使…...

[Java毕设2026]宿舍管理系统_SpringBoot+Vue【文末附源码】

系统介绍 宿舍管理系统是一套面向高校、职校和学生公寓场景的数字化宿舍管理平台,围绕楼栋、房间、床位、学生和宿舍日常事务,打造一套清晰、高效、可追踪的业务管理系统。 系统概述 本系统采用前后端分离架构,前端基于 Vue 3 Element Pl…...

终极Windows右键菜单清理指南:ContextMenuManager让你的桌面操作效率翻倍

终极Windows右键菜单清理指南:ContextMenuManager让你的桌面操作效率翻倍 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否经常在Windows右键菜…...

终极鼠标灵敏度转换指南:3D游戏间精准保持肌肉记忆的完整解决方案

终极鼠标灵敏度转换指南:3D游戏间精准保持肌肉记忆的完整解决方案 【免费下载链接】SensitivityMatcher Script that can be used to convert your mouse sensitivity between different 3D games. 项目地址: https://gitcode.com/gh_mirrors/se/SensitivityMatch…...

2026届最火的降AI率网站解析与推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 当下,占据主流地位的降 AIGC 工具,凭借同义词替换、句式重组以及语义…...

如何理解A醇价格背后的检测与批次管理逻辑

如何理解A醇价格背后的检测与批次管理逻辑在化妆品原料采购领域,A醇(视黄醇)作为一种高活性功效成分,其价格差异往往令采购与研发人员困惑——同标称纯度的A醇,不同供应商报价可能相差悬殊。价格差异的根源&#xff0c…...

如何为Calibre高效获取豆瓣图书元数据:New Douban插件完整指南

如何为Calibre高效获取豆瓣图书元数据:New Douban插件完整指南 【免费下载链接】calibre-douban Calibre new douban metadata source plugin. Douban no longer provides book APIs to the public, so it can only use web crawling to obtain data. This is a cal…...

Windows 10安卓子系统完整安装教程:无需升级Win11的终极解决方案

Windows 10安卓子系统完整安装教程:无需升级Win11的终极解决方案 【免费下载链接】WSA-Windows-10 This is a backport of Windows Subsystem for Android to Windows 10. 项目地址: https://gitcode.com/gh_mirrors/ws/WSA-Windows-10 还在羡慕Windows 11用…...

国民技术 N32G430F8S7 TSSOP-20 单片机

关键特性 内核CPU -32位ARMCortex-M4 内核FPU,支持DSP指令 一内置1KB指令Cache缓存,支持Flash加速单元执行程序0等待 一 最高主频128MHz,160DMIPS 加密存储器 高达64KByte片内Flash,支持加密存储、分区管理及数据保护,…...

如何用Python-miio掌控小米智能设备:2025终极自动化控制指南

如何用Python-miio掌控小米智能设备:2025终极自动化控制指南 【免费下载链接】python-miio Python library & console tool for controlling Xiaomi smart appliances 项目地址: https://gitcode.com/gh_mirrors/py/python-miio Python-miio是一款强大的…...

手把手教你用PyTorch复现SuperPoint:从官方源码到自定义匹配可视化(附完整代码)

PyTorch实战:从零构建SuperPoint特征检测器与自定义可视化系统 在计算机视觉领域,特征点检测与匹配一直是基础而关键的技术环节。SuperPoint作为自监督学习的里程碑式工作,以其优异的性能表现成为众多视觉任务的基石。本文将带您深入PyTorch实…...

新能源数智化

1、方案总览 基于通用大数据实施方案框架,深度融合汽车行业「研产供销服」全价值链场景,构建以 “多模态数据智能中台”为核心,“数据智能引擎”与“空间智能引擎(数字孪生)” 为两翼的一体化平台,实现乘用…...

保姆级避坑指南:在Ubuntu 24.04虚拟机里用Docker搞定YOLOv11到MaixCam的模型转换

从零到一:Ubuntu 24.04虚拟机Docker实现YOLOv11模型到MaixCam的高效转换实战 边缘AI部署正成为智能硬件开发的热门方向,但对于刚接触Linux和Docker的开发者来说,从训练好的模型到实际设备部署往往充满挑战。本文将手把手带你完成YOLOv11模型从…...

OpenRGB:一站式解决你的RGB灯光管理烦恼,告别多软件切换时代!

OpenRGB:一站式解决你的RGB灯光管理烦恼,告别多软件切换时代! 【免费下载链接】OpenRGB Open source RGB lighting control that doesnt depend on manufacturer software. Supports Windows, Linux, MacOS. Mirror of https://gitlab.com/Ca…...

校招面试PCB岗,没有项目经验就拿这三点补

不瞒各位说,当初找工作的时候,简历上那个"项目经历"栏差点给我整秃了。你说嵌入式开发、电子竞赛,好歹还能写点东西。但PCB设计这东西,学校教的和实际用的,感觉是两个世界。投了几个大厂的PCB岗,…...

如何彻底掌握Upscayl:从零到精通的AI图像超分辨率终极指南

如何彻底掌握Upscayl:从零到精通的AI图像超分辨率终极指南 【免费下载链接】upscayl 🆙 Upscayl - #1 Free and Open Source AI Image Upscaler for Linux, MacOS and Windows. 项目地址: https://gitcode.com/GitHub_Trending/up/upscayl 你是否…...

终极指南:如何用GPSTest精准测试手机卫星导航性能

终极指南:如何用GPSTest精准测试手机卫星导航性能 【免费下载链接】gpstest The #1 open-source Android GNSS/GPS test program 项目地址: https://gitcode.com/gh_mirrors/gp/gpstest 你的手机GPS到底有多准?🌍 通过GPSTest这款顶级…...

Rust 宏系统在工程化中的应用

Rust宏系统在工程化中的应用 Rust以其高性能和内存安全性著称,而宏系统则是其元编程能力的核心体现。在工程化开发中,宏能够显著减少重复代码、提升开发效率,并增强代码的可维护性。无论是自动生成样板代码,还是实现领域特定语言…...

VS Code Mermaid插件终极攻略:技术文档图表绘制的完全指南 [特殊字符]

VS Code Mermaid插件终极攻略:技术文档图表绘制的完全指南 🚀 【免费下载链接】vscode-markdown-mermaid Adds Mermaid diagram and flowchart support to VS Codes builtin markdown preview 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-mar…...

终极指南:5个技巧快速搭建Windows免费Syslog服务器

终极指南:5个技巧快速搭建Windows免费Syslog服务器 【免费下载链接】visualsyslog Syslog Server for Windows with a graphical user interface 项目地址: https://gitcode.com/gh_mirrors/vi/visualsyslog 还在为网络设备日志分散管理而烦恼吗?…...

Go语言的sync.Map中的使用

Go语言中的sync.Map是一个并发安全的键值对集合,它特别适合在高并发场景下替代传统的map加互斥锁的方案。与普通的map不同,sync.Map内部通过巧妙的机制实现了无锁读取和分段锁写入,从而在保证线程安全的同时提升了性能。对于需要频繁读取但较…...

bert-base-chinese效果展示:中文语义理解能力的实际案例分享

bert-base-chinese效果展示:中文语义理解能力的实际案例分享 1. 模型核心能力概览 bert-base-chinese作为中文NLP领域的基石模型,展现了令人惊艳的语义理解能力。这个由Google发布的预训练模型,专门针对中文语言特性进行了优化,…...

别再只调参了!用Scikit-learn的SVM搞定鸢尾花分类,这5个可视化技巧让结果一目了然

5个Scikit-learn可视化技巧:让鸢尾花分类结果会说话 在机器学习项目中,模型训练只是第一步。真正考验功力的是如何将晦涩的数值结果转化为直观、有说服力的可视化呈现。很多数据科学家花费大量时间调参优化,却在最后展示环节草草了事——打印…...

Upscayl终极指南:免费开源AI图像超分辨率工具完整解析

Upscayl终极指南:免费开源AI图像超分辨率工具完整解析 【免费下载链接】upscayl 🆙 Upscayl - #1 Free and Open Source AI Image Upscaler for Linux, MacOS and Windows. 项目地址: https://gitcode.com/GitHub_Trending/up/upscayl 你是否曾经…...

跨平台文本编辑实战指南:Notepad--在开发工作中的高效应用方案

跨平台文本编辑实战指南:Notepad--在开发工作中的高效应用方案 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器,目标是做中国人自己的编辑器,来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad-- …...

如何解锁被锁的二手iPhone:开源工具applera1n详细指南

如何解锁被锁的二手iPhone:开源工具applera1n详细指南 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 当您购买二手iPhone却遇到激活锁限制时,是否感到束手无策?app…...

STM32项目交付新姿势:用CoFlash把.bin/.elf文件甩给客户,告别源码工程

STM32项目交付新姿势:用CoFlash实现二进制文件的安全传递 在嵌入式开发领域,知识产权保护与高效协作往往是一对难以调和的矛盾。传统开发模式下,工程师不得不将完整的Keil或CubeIDE工程源码打包交付给客户或生产部门,这不仅暴露了…...

PMP认证备考全攻略:费用、周期与机构选择常见问题解答

PMP(项目管理专业人士)认证作为项目管理领域的“黄金标准”,近年来在国内职场的热度持续走高。对于想要系统提升项目管理能力或获取资质背书的职场人来说,报考前往往会有诸多疑问。针对大家最关心的费用投入、备考周期以及如何选择…...