Operating System-进程/线程内部通信-临界区(Critical Regions)
上一篇文章講述了進(jìn)程之間的競爭條件:多個(gè)進(jìn)程同時(shí)進(jìn)入一個(gè)共享區(qū)域,導(dǎo)致了數(shù)據(jù)的不一致,本文主要介紹如何解決這個(gè)問題。
一、臨界區(qū)介紹
解決這個(gè)問題就是阻止多個(gè)進(jìn)程同時(shí)進(jìn)入這個(gè)共享區(qū)域,換句話說,進(jìn)程之間針對這塊共享區(qū)域需要排他(Mutual Exclusion)。問題的根源是進(jìn)程B在進(jìn)程A沒有從共享區(qū)域返回之前就進(jìn)入了共享區(qū)域。
在大部分情況下兩個(gè)進(jìn)程之間是不會(huì)共享變量的,只會(huì)有一部分步驟會(huì)使用到共享變量,在程序設(shè)計(jì)中,可以把這部分訪問共享變量程序單獨(dú)設(shè)計(jì)出來,這部分程序叫做臨界區(qū)(Critical Regions)。如果保證兩個(gè)進(jìn)程永遠(yuǎn)只有一個(gè)進(jìn)程進(jìn)入這塊臨界區(qū)域,那么進(jìn)程之間的條件競爭也就迎刃而解。
達(dá)到上面的結(jié)果需要以下條件:
- 沒有兩個(gè)進(jìn)程同時(shí)進(jìn)入臨界區(qū)域
- 對CPU的速度或者數(shù)量不做要求
- 被Block在臨界區(qū)域之外的等待的進(jìn)程會(huì)block其他進(jìn)程,比如,進(jìn)程A在臨界區(qū)域內(nèi),那么這個(gè)時(shí)候進(jìn)程B來訪問臨界區(qū),進(jìn)程B就會(huì)被Block到臨界區(qū)外,這個(gè)時(shí)候的進(jìn)程B不應(yīng)該Block其他進(jìn)程
- 沒有進(jìn)程會(huì)被永遠(yuǎn)Block到臨界區(qū)之外
二、臨界區(qū)演示
圖示
?
- 在T1時(shí)間Process A進(jìn)入臨界區(qū)域
- T2時(shí)間,Process B嘗試進(jìn)入臨界區(qū)域
- 因?yàn)锳在臨界區(qū)域,所以B被Block
- T3時(shí)間A離開臨界區(qū)域,B進(jìn)入臨界區(qū)域時(shí)間
- T4時(shí)間,B離開臨界區(qū)域
使用臨界區(qū)域的概念有什么好處呢?
- 如果進(jìn)程A和B在大部分時(shí)間內(nèi)沒有使用到共享資源,那么在這段時(shí)間內(nèi)內(nèi)A、B是可以并行執(zhí)行的。
- 只有針對臨界區(qū)域的訪問才不能并行。
- 最大限度讓進(jìn)程并行工作,且高效的使用共享數(shù)據(jù)
三、總結(jié)
- 抽象臨界區(qū)域
- 對臨界區(qū)域進(jìn)行排他
- 如歌實(shí)現(xiàn)排他呢?下一篇文章進(jìn)行介紹。
轉(zhuǎn)載于:https://www.cnblogs.com/Brake/p/Operating_System_Interprocess_Communication_Critical_Regions.html
總結(jié)
以上是生活随笔為你收集整理的Operating System-进程/线程内部通信-临界区(Critical Regions)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 获取iOS系统版本
- 下一篇: iOS ReactiveCocoa 最全