某網路系統有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...