多线程程序的临界区

所谓的临界区:是指进程中的一段需要访问共享资源并且当另一个进程处于相应代码区域时便不会被执行的代码区域
对于临界区的管理的必须要满足一下的四个要求:
互斥:同一时间临界区中最多存在一个线程
Progress:如是一个线程想要进入临界区,那么它最终会成功
有限等待:如果一个线程i处于入口区,那么在i的请求被接受之前,其他线程进入临界区的时间是有限制的。
无忙等待(可选):如果一个进程在等待进入临界区,那么在它可以进入之前会被挂起。

解决方案
①:禁用硬件中断
缺点:一旦中断被禁用,线程就无法被停止,整个系统都会为你停下来。可能导致其他线程处于饥饿状态。
②:基于软件的解决方法
③:更高级的抽象

案例分析:假设有甲乙两个人共用一个冰箱里的面包,如果那个人发现冰箱里没有面包后就去购买面包。如果保证冰箱里的面包不会多也不会少。

代码

image

问题:如何保证以上面包只能是某一个人购买。

解决方案一:加入lock操作原语

image

posted @   李华丽  阅读(922)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
历史上的今天:
2018-08-10 NPOI 操作Excel方法
2016-08-10 ASP.NET MVC Razor语法
2016-08-10 SVN Tree Conflict 的分析
AmazingCounters.com
点击右上角即可分享
微信分享提示