跳轉至

進程的同步

定義

進程同步是指在並發運行的進程中,當一個進程運行到某個特定位置(稱為同步點)時,只有在其他進程已經完成某些操作、滿足了繼續運行的條件(稱為同步條件)後,該進程才能繼續運作;否則必須等待。

行程同步的關鍵要素:

  1. 同步點:進程在此等待其他進程的某些操作完成,以滿足繼續執行的條件。

  2. 同步條件:必須滿足的條件,使行程在同步點上能夠繼續執行。

  3. 作用:透過同步機制,可以協調多個行程的執行順序,確保資料一致性和資源的正確使用,防止競爭和衝突。

進程同步常透過信號量機制事件通知條件變數等方式實現。

互斥問題

互斥問題主要解決的是多個並發程序對臨界區(Critical Section)的存取控制問題。在並發系統中,多個行程可能同時存取共享資源,如果沒有適當的控制機制,可能會導致競態條件、資料不一致或資源衝突。

  • 信號量解決互斥問題: 利用信號量(Semaphore)可以解決互斥問題,透過對信號量的P(等待)和V(釋放)操作來控制進程對共享資源的存取:
    • P操作:請求進入臨界區,若信號量為0,進程會阻塞,直到信號量大於0。
    • V操作:退出臨界區,釋放信號量,通知其他程序可以進入臨界區。

互斥的實現:透過設定一個信號量(如semaphore mutex = 1),保證在任何時刻只有一個進程可以進入臨界區,其他進程只能等待,直到信號量恢復,表示可以進入臨界區。這樣就解決了並發進程對臨界區的互斥存取問題。

進程同步問題

進程同步問題則著重在多個並發進程如何協調工作,確保依照某種順序或規則執行,以實現共同的目標。有別於互斥,進程同步更多的是在進程間進行協作、協調,解決進程之間的順序與依賴關係。

  • 非同步環境下的進程同步問題: 在非同步環境中,每個進程都是獨立的,並以各自不可預測的速度推進。進程之間需要協調,才能完成一個共同的任務。例如,生產者-消費者問題、讀寫鎖、信號量等機制都可以解決進程之間的同步問題。

  • 進程同步的定義

    • 進程同步:相互合作的一組並發進程,其中每一個進程都以各自獨立的速度向前推進,但它們需要密切合作,以完成共同的任務。
    • 在這些進程之間,必須確保它們「知道」對方的存在,並且協調各自的工作,保證正確的執行順序。

解決方法:使用兩個信號量來控制同步:

  • 空槽訊號量:表示緩衝區中空餘的空間,初始值為緩衝區大小。

  • 滿槽信號量:表示緩衝區中已存放的項目數量,初始值為0。