1. 程式人生 > >7.進程同步之臨界區問題

7.進程同步之臨界區問題

false pan last then situation 完整 ini col color

生產者-消費者問題的一種解法


原子操作(Atomic operation)要求該操作完整地一次性完成,不允許中間被打斷

Race Condition :The situation where several processes access and manipulate shared data concurrently(並發地).The final value of the shared data depends upon which process finished last;(誰最後完成)

為了避免race conditions,並發進行必須同步


臨界區問題(The Critical-Section Problem)

  •   假設n個進程競相訪問共享數據的情形
  •   每個進程存在一段代碼,稱作為臨界區,進程就是通過這段代碼訪問了共享 數據
  •   其他代碼沒有訪問共享數據
  •   這n個進程中,至少存在1個以上的進程甚至修改了共享數據

怎樣確保當有一個進程i正在其自己的臨界區執行時,沒有其他任何進程j也在它的臨界區中執行?


臨界區問題的解決方案必須滿足3條件

  互斥條件(只能有有限個進程在臨界區裏面)

  空閑讓進:

    if

      沒有進程處於它的臨界區 and 某些進程申請進入其臨界區

    then

      只有那些不在remainder sections的進程,才能參與能否進入臨界區的選

and 這個選舉不允許無限期(indefinitely)推遲(有限次進入       臨界區)

  有限等待

    某一進程從其提出請求,至它獲準進入臨界區的這段時間裏,其它進程進入他們的臨界區的次數存在上界

    假設進程各自都在持續執行

    不考慮N個進程之間的相對執行速度

技術分享圖片


Algorithm 1

定義兩進程共享數據

  int turn;

  並且取初值turn=0;

  turn=i;進程Pi可以進入臨界區

  進程Pi

    do{

      while(trun!=i)

        critical section //等待

      turn=j;

        remainder.section //交還

}while(1);  


臨界區問題的硬件指令解決方案

技術分享圖片

思想就是,只有當lock為false時,才可以進去,否則就一直等待


7.進程同步之臨界區問題