作業系統 程序同步相關問題的整理與總結

2021-10-10 13:26:20 字數 1379 閱讀 9811

mutex lock – 互斥鎖

while (ture)
acquire()

若acquire呼叫成功,該程序可進入critical section(臨界區)訪問該資源,否則陷入忙等待狀態 –spinlock(自旋鎖),直至mutex lock被釋放–(占用該資源的程序執行過critical section 進入release lock釋放鎖)。

acquire()
release()
release()
semaphore – 訊號量

wait(s) signal(s) 有時會被寫為p(s) v(s)

int s = 1;  //==初始化整型訊號量s為1,表示當前可使用資源數為1==

while (s <= 0) // ==如果資源數》0,則直接訪問;否則進入忙等狀態==

; // busy wait

s--; //==若乙個資源被占用,資源數量就要 -1 ==

}signal(s)

pseudocode 示意:

while (true)
monitor – 管程 (不全-- 等我有空再補)

雖然訊號量解決了程序同步的問題,但有時多程序的同時使用還是可能會造成一些問題。

例如:

[情況1]: 乙個程序交換了對訊號量 mutex 的 wait()和 signal()的順序,從而產生如下結構:

signal(mutex);

...critical section

...wait(mutex);

這樣多個程序可能同時出現在其臨界區內執行,因為違反了互斥要求。這種錯誤只有在多 個程序同時在其臨界區內執行才會被發現。

[情況2]:乙個程序用 wait(mutex)替代了 signal(mutex),即

wait(mutex);

...critical section

...wait(mutex);

會出現死鎖。

[情況3]:假設乙個程序省略了 wait(mutex)或 signal(mutex),也可能會出現死鎖,也可能 會破壞互斥。

reference:

[1]:

[2]: operating.system.concepts.10th.edition.

作業系統程序同步問題

一 臨界區 互相協作的程序之間有共享的資料,於是這裡就有乙個併發情況下,如何確保有序操作這些資料 維護一致性的問題,即程序同步。為了解決合作程序之間的競爭條件,引入臨界區問題模型。臨界區是包含訪問共享資料指令的相關 段,也是多個程序都包含的 段,在這段 中可能會進行更新資料表 交換變數等操作。從資料...

作業系統 程序同步問題

1 桌上有一空盤,允許存放乙隻水果。爸爸可向盤中放蘋果也可向盤中放桔子,兒子專等吃盤中的桔子,女兒專等吃盤中的蘋果。規定當盤空時一次只能放乙隻水果供吃者取用,請用p v原語實現爸爸 兒子 女兒三個併發程序的同步。semaphore s 1,sa 0,so 0 main father son daug...

作業系統 程序同步

臨界資源 critical resouce 臨界區 critical section 硬體同步機制 訊號量機制 訊號量的應用 管程3使用多道批處理系統不僅能有效的改善資源的利用率,還可以顯著地提高系統的吞吐量,但同時會使系統變得更加複雜,會使程式的執行結果存在不確定性。所以必須引入程序同步機制從而保...