生產者-消費者(三個訊號量)
empty:緩衝區 空閒 資源數,full:緩衝區 已滿 資源數 : 保證不會空時消費,滿時生產(保證順序、同步)
mutex 代表互斥鎖 : 保證同一時間只有乙個執行緒可以訪問共享資源(互斥訪問)
producer
}consumer
}
不能將執行緒裡兩個wait的交換順序,否則會出現死鎖。例如(調換後),將consumer的兩個wait調換,在producer發出signal訊號後,如果producer執行緒此時再次獲得執行機會,執行完了wait(space),此時,另乙個consumer執行緒獲得執行機會,執行了 wait(mutex) ,如果此時緩衝區為空,那麼consumer將會阻塞在wait(items),而producer也會因為無法獲得鎖的所有權所以阻塞在wait(mutex),這樣兩個執行緒都在阻塞,也就造成了死鎖。
滿足條件,才能獲得鎖。
如果consumer先將mutex減1,然後緩衝區已空,將阻塞。producter試圖訪問緩衝區,但mutex為0,阻塞。將無限等待造成死鎖。
讀者-寫者問題 (可以多個程序同時讀,但是寫時就只能有乙個寫)
wmutex: 互斥的寫 (寫時不能讀,只能乙個寫)
rmutex: 互斥的使用readcount(對readcount加鎖)
readcount: 統計讀程序數目,及讀者數量(臨界資源,多個讀程序共享)
reader()
readcount++;
signal(rmutex); //釋放readcount使用權
// 讀的過程
wait(rmutex);
readcount--;
if(readcount == 0) //如果這是最後乙個讀者了,完成了
signal(rmutex);
}}void writer()
}
哲學家進餐問題 : 只允許同時拿起左右兩邊的筷子
mutex: 互斥量,對拿起左右兩隻筷子加鎖(只有乙個程序能訪問)
while(true)
程序同步的三個經典問題
要求 producer和consumer,二者不能對buffer進行操作 當buffer滿的時候,就不允許producer繼續寫 當buffer空的時候,就不允許consumer繼續讀 訊號量及其初始化 semaphore mutex 1 buffer的鎖 semapore full 0 滿位的數量...
程序同步問題
有讀者和寫者兩組併發程序,共享乙個檔案,當兩個或以上的讀程序同時訪問共享資料時不會產生 但若某個寫程序和其他程序 讀程序或寫程序 同時訪問共享資料時則可能導致資料不一致的錯誤。因此要求 允許多個讀者可以同時對檔案執行讀操作 只允許乙個寫者往檔案中寫資訊 任一寫者在完成寫操作之前不允許其他讀者或寫者工...
人際交往三個常見問題
人際交往是什麼?人際交往也被稱 為人際溝通 是指個體通過一定的文字 語言或表情 肢體動作等表達手段將某種資訊傳遞給其他個體的過程 良好的人際交往有什麼作用?1 人際關係好的人很少得心理疾病,例如抑鬱 焦躁 沉悶等等,因為這些人善於交談,開朗,有什麼心裡話都能說出來,不憋在心理,這樣有利於身心健康的發...