操作系統-進程同步-信號量機制

整型信號量

1.兩個進程互斥訪問一個臨界資源 信號量s 初始值爲 1

var s integer 
wait(s) //用於申請資源
{
	while s<=0 do no-op;
		s=s-1 
}

signal(s) //用於釋放資源
{
s=s+1
}

進程p1

p1 {
wait(mutex);
	counter= counter+1;
signal(mutex);
}

進程2

p2 {
wait(mutex);
	counter= counter+1;
signal(mutex);
}

2 進程p2必須在p1結束後執行 信號量s 初始值爲0

begin
	 p1;//p1操作互斥資源
	signal(s)
;end;

begin 
	wait(s);
	p2;//p2操作互斥資源
end 

3 進程p1 p2 p3 順序執行

p1的信號量s1 初始值爲0
p2的信號量s2 初始值爲0
p3的信號量s3 初始值爲1

p1 
{
	wait(s3)

	singal(s1)
}

p2
{
	wait(s1)

	singal(s2)
}

p3
{
	wait(s2)

	singal(s3)
}

記錄型信號量

數據類型

Type semaphore=record 
		Value:integer //資源數量
		L:list of process //阻塞隊列

procedure wait(s)
	var s:semaphore;
	begin 
		s.value=s.value-1;
		if s.value <0 then block(s.L);
	
	end;
procedure  signal(s)
	var s:semaphore;
	begin 
		s.value=s.value+1;
		if s.value <=0 then wakeup(s.L);
	end;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章