題目:三個程序分別列印a,b,c,要求輸出的結果必須是「abcabc」順序執行
設定三個訊號量:
sem1:初始值設定為1,保證程序可以執行,對sem1執行p操作,程序3輸出c後,對sem1進行v操作
sem2:初始值設為0,程序2執行後對sem2進行p操作,程序1輸出a後對sem2進行v操作
sem3:初始值設為0,程序3執行後對sem3執行p操作,程序2輸出b後對sem3執行v操作
sem.h
#pragma once
typedef
union semun
semun;
intgetsem
(int key,
int initval,
int n)
;int
delsem
(int semid)
;int
semp
(int semid,
int index)
;int
semv
(int semid,
int index)
;
sem.c
#include
"sem.h"
#include
#include
#include
#include
intgetsem
(int key,
int initval,
int n)
int i =0;
for(
; i < n;
++i)}}
return semid;
}int
semp
(int semid,
int index)
return0;
}int
semv
(int semid,
int index)
return0;
}int
delsem
(int semid)
return0;
}
1.c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
"sem.h"
intmain()
;int semid =
getsem
(1234
, initval,
sizeof
(initval)
/sizeof
(initval[0]
));assert
(semid !=-1
);int count =0;
while
(count <5)
exit(0);}
2.c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
"sem.h"
intmain()
;int semid =
getsem
(1234
, initval,
sizeof
(initval)
/sizeof
(initval[0]
));assert
(semid !=-1
);int count =0;
while
(count <5)
exit(0);}
3.c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
"sem.h"
intmain()
;int semid =
getsem
(1234
, initval,
sizeof
(initval)
/sizeof
(initval[0]
));assert
(semid !=-1
);int count =0;
while
(count <5)
exit(0);}
執行結果:
訊號量習題
1.設有n個程序共享乙個互斥段,對於如下兩種情況使用訊號量,訊號量的值應該怎樣變化 1 如果每次只允許乙個程序進入互斥段 2 如果每次最多允許m個程序 m 1 訊號量的初值是1,變化量範圍是1,0,1,2,1 n 2 訊號量的初值是m,變化量範圍是m,m 1,m 2,m n 2.桌子上有乙個盤子,每...
訊號量 二值訊號量
訊號量 二值訊號量 訊號量是作業系統的重要部分,訊號量一般用來進行資源管理和任務同步。freertos中訊號量分為二值訊號量 互斥訊號量 計數訊號量和遞迴互斥訊號量,應用場景各不同。二值訊號量通常用於互斥訪問或同步,二值訊號量和互斥訊號量非常相似,但互斥訊號量有優先順序,二值訊號量沒有。因此二值訊號...
python訊號量 Python訊號量
python訊號量教程 訊號量是由作業系統管理的一種抽象資料型別,用於在多執行緒中同步對共享資源的使用。本質上說,訊號量是乙個內部資料,用於標明當前的共享資源可以有多少併發讀取。也可以簡單的理解為,訊號量是多把鎖,同時允許多個執行緒來更改資料,而 python訊號量與互斥鎖的關係 訊號量的乙個特殊用...