訊號量與管程

2021-10-22 12:06:48 字數 1344 閱讀 9025

記錄型訊號量:

實現程序互斥:

實現程序同步:

實現前驅關係:

生產者消費者問題:

問題實現:

相鄰的p操作的順序不能改變,否則會出現死鎖。實現互斥的p操作一定要實現同步的p操作之後。相鄰的v操作的順序可以改變。

多生產者多消費者問題:

問題實現:

當緩衝區只有1時,沒有互斥訊號量也可以。

吸菸者問題:

問題實現:

讀者寫者問題:

問題實現:

實現2:

核心思想:設定了乙個count計數器來判斷當前進入的程序是否是第第乙個/最後乙個讀程序。

如果需要一氣呵成的操作,就應該想到使用互斥訊號量。

哲學家進餐問題:

如何防止死鎖的發生:

方法3的問題實現:

管程:什麼時候對發生死鎖:

死鎖的處理策略:

預防死鎖:

破壞請求和保持條件:可以採用靜態分配方法,即程序在執行前一次申請完它所需要的全部資源,在它的資源未滿足前,不讓它投入執行。一旦投入執行後,這些資源就一直歸它所有,該程序就不會再請求別的任何資源了。

破壞迴圈等待條件:可採用順序資源分配法。首先給系統中的資源編號,規定每個程序必須按編號遞增的順序請求資源,同類資源(即編號相同的資源)一次申請完。

避免死鎖:

死鎖的檢測:

死鎖的解除:

訊號量和管程

在os引入多執行緒後,程式的多工併發功能得到了良好的支援,但同時也帶來了問題,那就是多執行緒併發會導致一些共享的資源產生競爭問題 例如對共享資料區的資料進行操作 而在計算機中,操作這種共享資源的 塊被稱為臨界區。為了解決這種競爭衝突,我們必須理解兩個概念 同步和互斥。互斥 所謂互斥,就是說,任何時候...

訊號量管程解決同步問題

某網路系統有n個工作執行緒和1個排程服務程序,作線 星初始化時 守候佇列中等待 當使用者請求到達時,由服務程序喚醒工作執行緒執 若工執行緒守候隊列為空則則檢查請求等待佇列是否已滿 最多可存放m個使用者請求 未滿則將使用者請求放入等待佇列,否則拒絕使用者請求,工作執行緒執行結束時,檢查直請求等待佇列是...

作業系統訊號量和管程

同步互斥回顧 併發問題 競爭條件 競態條件 同步確保執行緒同步 訊號量是抽象資料型別 訊號量實現一般有兩種 訊號量可以用在兩個方面 用二值訊號量實現互斥功能 mutex new semaphore 1 初始化乙個值為1的訊號量作為乙個鎖 mutex p 訊號量減1 執行臨界區 此時如果有其他執行緒要...