上一篇文章讲述了进程之间的竞争条件:多个进程同时进入一个共享区域,导致了数据的不一致,本文主要介绍如何解决这个问题。

一、临界区介绍

解决这个问题就是阻止多个进程同时进入这个共享区域,换句话说,进程之间针对这块共享区域需要排他(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是可以并行执行的。
  • 只有针对临界区域的访问才不能并行。
  • 最大限度让进程并行工作,且高效的使用共享数据

三、总结

  • 抽象临界区域
  • 对临界区域进行排他
  • 如歌实现排他呢?下一篇文章进行介绍。

最新文章

  1. (转)android平台phonegap框架实现原理
  2. shell字符串判空
  3. 给Azure 虚机的硬盘扩充容量[转]
  4. oracle OFA
  5. How to Be Good at Mathematics
  6. C#中的线程(下)-多线程
  7. OpenCV学习 1:OpenCV安装与第一个图像显示程序
  8. 关于AD9516芯片的硬件设计和FPGA程序编写心得
  9. [FTP]通过FileZilla在阿里云主机上搭建ftp服务器
  10. [Swift]LeetCode1022. 从根到叶的二进制数之和 | Sum of Root To Leaf Binary Numbers
  11. 移动端弹出层加遮罩后禁止body滑动
  12. 大数据项目测试<二>项目的测试工作
  13. SpringBoot 项目打包后运行报 org.apache.ibatis.binding.BindingException
  14. Linux 小知识翻译 - 「Linux和CPU的兼容性」
  15. 这是一个数学题牛客训练赛E
  16. ztree异步加载树节点
  17. org.hibernate.id.IdentifierGenerationException
  18. PhoneGap+Cordova+SenchaTouch-01-环境搭建
  19. UML基本架构建模--类的辅助信息
  20. apache绑定多个域名

热门文章

  1. Django---Blog系统开发之注册页面(验证码&ajax发送文件)
  2. 函数---迭代器&生成器&列表解析&三元表达式
  3. Win32 API编程:WinMain无法重载函数或_tWinMain无法重载
  4. SpringBoot Mybatis 入门
  5. eclipse中web项目部署到本地tomcat中,但是在本地的tomcat的webapp下找不到发布的项目
  6. Why does typeof array with objects return “Object” and not “Array”?
  7. codeforces707A:Brain's Photos
  8. 总结django知识点
  9. Ant入门
  10. openstack live migration性能分析