Operating System-进程/线程内部通信-临界区(Critical Regions)
2024-10-19 16:22:47
上一篇文章讲述了进程之间的竞争条件:多个进程同时进入一个共享区域,导致了数据的不一致,本文主要介绍如何解决这个问题。
一、临界区介绍
解决这个问题就是阻止多个进程同时进入这个共享区域,换句话说,进程之间针对这块共享区域需要排他(Mutual Exclusion)。问题的根源是进程B在进程A没有从共享区域返回之前就进入了共享区域。
在大部分情况下两个进程之间是不会共享变量的,只会有一部分步骤会使用到共享变量,在程序设计中,可以把这部分访问共享变量程序单独设计出来,这部分程序叫做临界区(Critical Regions)。如果保证两个进程永远只有一个进程进入这块临界区域,那么进程之间的条件竞争也就迎刃而解。
达到上面的结果需要以下条件:
- 没有两个进程同时进入临界区域
- 对CPU的速度或者数量不做要求
- 被Block在临界区域之外的等待的进程会block其他进程,比如,进程A在临界区域内,那么这个时候进程B来访问临界区,进程B就会被Block到临界区外,这个时候的进程B不应该Block其他进程
- 没有进程会被永远Block到临界区之外
二、临界区演示
图示
- 在T1时间Process A进入临界区域
- T2时间,Process B尝试进入临界区域
- 因为A在临界区域,所以B被Block
- T3时间A离开临界区域,B进入临界区域时间
- T4时间,B离开临界区域
使用临界区域的概念有什么好处呢?
- 如果进程A和B在大部分时间内没有使用到共享资源,那么在这段时间内内A、B是可以并行执行的。
- 只有针对临界区域的访问才不能并行。
- 最大限度让进程并行工作,且高效的使用共享数据
三、总结
- 抽象临界区域
- 对临界区域进行排他
- 如歌实现排他呢?下一篇文章进行介绍。
最新文章
- (转)android平台phonegap框架实现原理
- shell字符串判空
- 给Azure 虚机的硬盘扩充容量[转]
- oracle OFA
- How to Be Good at Mathematics
- C#中的线程(下)-多线程
- OpenCV学习 1:OpenCV安装与第一个图像显示程序
- 关于AD9516芯片的硬件设计和FPGA程序编写心得
- [FTP]通过FileZilla在阿里云主机上搭建ftp服务器
- [Swift]LeetCode1022. 从根到叶的二进制数之和 | Sum of Root To Leaf Binary Numbers
- 移动端弹出层加遮罩后禁止body滑动
- 大数据项目测试<;二>;项目的测试工作
- SpringBoot 项目打包后运行报 org.apache.ibatis.binding.BindingException
- Linux 小知识翻译 - 「Linux和CPU的兼容性」
- 这是一个数学题牛客训练赛E
- ztree异步加载树节点
- org.hibernate.id.IdentifierGenerationException
- PhoneGap+Cordova+SenchaTouch-01-环境搭建
- UML基本架构建模--类的辅助信息
- apache绑定多个域名
热门文章
- Django---Blog系统开发之注册页面(验证码&;ajax发送文件)
- 函数---迭代器&;生成器&;列表解析&;三元表达式
- Win32 API编程:WinMain无法重载函数或_tWinMain无法重载
- SpringBoot Mybatis 入门
- eclipse中web项目部署到本地tomcat中,但是在本地的tomcat的webapp下找不到发布的项目
- Why does typeof array with objects return “Object” and not “Array”?
- codeforces707A:Brain&#39;s Photos
- 总结django知识点
- Ant入门
- openstack live migration性能分析