mutex lock – 互斥鎖
while (ture)
acquire()若acquire呼叫成功,該程序可進入critical section(臨界區)訪問該資源,否則陷入忙等待狀態 –spinlock(自旋鎖),直至mutex lock被釋放–(占用該資源的程序執行過critical section 進入release lock釋放鎖)。
acquire()
release()semaphore – 訊號量release()
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 示意:monitor – 管程 (不全-- 等我有空再補)while (true)
雖然訊號量解決了程序同步的問題,但有時多程序的同時使用還是可能會造成一些問題。
例如:
[情況1]: 乙個程序交換了對訊號量 mutex 的 wait()和 signal()的順序,從而產生如下結構:reference:這樣多個程序可能同時出現在其臨界區內執行,因為違反了互斥要求。這種錯誤只有在多 個程序同時在其臨界區內執行才會被發現。signal(mutex);
...critical section
...wait(mutex);
[情況2]:乙個程序用 wait(mutex)替代了 signal(mutex),即
會出現死鎖。wait(mutex);
...critical section
...wait(mutex);
[情況3]:假設乙個程序省略了 wait(mutex)或 signal(mutex),也可能會出現死鎖,也可能 會破壞互斥。
[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使用多道批處理系統不僅能有效的改善資源的利用率,還可以顯著地提高系統的吞吐量,但同時會使系統變得更加複雜,會使程式的執行結果存在不確定性。所以必須引入程序同步機制從而保...