訊號量管程解決同步問題

2021-09-24 22:47:49 字數 1111 閱讀 2854

某網路系統有n個工作執行緒和1個排程服務程序,作線 星初始化時 守候佇列中等待;當使用者請求到達時,由服務程序喚醒工作執行緒執;若工執行緒守候隊列為空則則檢查請求等待佇列是否已滿(最多可存放m個使用者請求),未滿則將使用者請求放入等待佇列,否則拒絕使用者請求,工作執行緒執行結束時,檢查直請求等待佇列是否為空,若空則該執行緒自動進入守候佇列等待;,否則喚醒第乙個等待請求,要求請求佇列互斥訪問。請用訊號量機制實現工作執行緒和服務程序的排程過程。

題意同上請用管程機制解決以上問題

monitor schedule

condition wfull,wempty,sfull,sempty;

integer wc=0,sc=n;

procedure wake;

begin

if(wc==0) then wait(wempty);

if(sc==n) then wait(sfull);

if(sc==0)

if(wc==m) then signal(wfull);

if(sc==0) then signal(sempty);

endprocedure afterwork;

begin

if(wc==m) then wait(wfull);

if(sc==0) then wait(sempty);

if(wc==0)

sc=sc+1;

else

wc=wc+1;

if(wc==0) then wait(wempty);

if(sc==n) then wait(sfull);

endend monitor;

procedure workthread;

begin

while true do

begin

work();

schedule.afterwork;

endendprocedure serverthread;

begin

while true do

begin

userrequest();

schedule.wake;

endend

訊號量解決辦法:

管程:

訊號量和管程

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

訊號量與管程

記錄型訊號量 實現程序互斥 實現程序同步 實現前驅關係 生產者消費者問題 問題實現 相鄰的p操作的順序不能改變,否則會出現死鎖。實現互斥的p操作一定要實現同步的p操作之後。相鄰的v操作的順序可以改變。多生產者多消費者問題 問題實現 當緩衝區只有1時,沒有互斥訊號量也可以。吸菸者問題 問題實現 讀者寫...

同步 訊號量

include stdafx.h include includeusing namespace std int number 1 定義全域性變數 handle hsemaphore 定義訊號量控制代碼 unsigned long stdcall threadproc1 void lp long co...