Operating System-进程/线程内部通信-临界区(Critical Regions)

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

一、临界区介绍

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

三、总结

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

转载于:https://www.cnblogs.com/Brake/p/Operating_System_Interprocess_Communication_Critical_Regions.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值