程序同步與訊號量

2021-10-09 22:53:14 字數 892 閱讀 4743

對於多個程序訪問共享資料,需要程序進行同步合作完成操作。

我們可以使用訊號量來描述共享資料。

struct semaphore;p

(semaphore s)}v

(semaphore s)

}

這樣的話當我們訪問共享資料時,我們可以先呼叫p操作,訪問結束後呼叫v操作,這樣就可以當成程序同步的目的。

使用訊號量的問題

訊號量實際上也是乙個共享資料,我們也需要保證在不同排程順序下,訪問其資料的正確性。那麼我們在訪問訊號量時可以通過阻止其他程序的訪問來達到此目的,我們可以使用臨界區來完成該功能(將讀寫訊號量的**放在臨界區)。

臨界區:一次只允許乙個程序進入的該程序的那一段**。

實現臨界區的3種方法:

軟體操控:通過邏輯處理進行->複雜麻煩

通過阻止中斷來阻止排程。臨界區只允許乙個程序進入,當另乙個程序進入臨界區時,一定是發生了排程。要想排程,必須中斷(時間片到點發生時鐘中斷或者當前程序阻塞),那麼在進入臨界區時關中斷,退出時開中斷就行了。

可是對多cpu不適用,因為在乙個cpu上關中斷後,在另一cpu仍然可以有一程序進行訪問。需要注意的是關中斷只對當前程序有效,因為程序切換會導致eflags暫存器同樣進行切換使用硬體原子指令對訊號量進行上鎖開鎖。

總的來說,用臨界區保護訊號量,用訊號量實現程序的同步死鎖

死鎖:多個程序相互等待對方持有的資源而造成誰都無法執行的情況。

死鎖處理方法:

死鎖預防:破壞死鎖出現的條件

死鎖避免:檢測每個資源請求,如果造成死鎖就拒絕

死鎖檢測+恢復:檢測到死鎖出現,讓一些程序回滾,讓出資源

程序同步與訊號量

二.訊號量臨界區保護 三.訊號量的 實現 訊號量是用來記錄可用資源或等待執行緒數目的一種特殊的整形變數。通過對訊號量的修改,使得各個程序得以有序推進,完成程序同步。訊號量的 定義 struct semaphore兩種基本操作 當程序申請消費資源時執行p函式。首先將資源數目value減一,然後判斷va...

16 程序同步與死鎖 程序同步與訊號量

司機 while true 售票員 while true 印表機按照列印佇列執行列印,當列印佇列中有 6個列印任務,2個程序同時新增列印任務,列印佇列的第7個任務是哪個,需要協調 小結 程序有自己的執行條件,有時執行 有時等待,執行完 可能也要 發出訊號,讓等待該訊號的其他程序執行 程序同步 就是 ...

程序同步 訊號量機制

由dijkstra提出,目前已廣泛應用於單處理機和多處理機系統以及計算機網路中。一 整形訊號量 1.s 乙個用於表示資源數目的整型量 2.與一般整型量不同,除初始化外,僅能通過兩個標準的原子操作 wait s 和signal s 長期以來一直被稱為p v操作 3.wait操作偽碼描述 wait s ...