用一个整数型的变量作为信号量,用来表示系统中某种资源的数量。
三种操作(初始化,P操作,V操作)
int S = 1;//初始化信号量S
void wait(int S){
while(S<=0);
S = S-1;
}
void signal(int S){
S = S+1;
}
整型信号量的缺陷是存在忙等问题,所以提出了记录型信号量
typedef struct{
int value;
struct process *L;
}semaphore;
void wait(semaphore S){
S.value--;
if(S.value<0){
block(S.L);
}
}
void signal(semaphore S){
S.value++;
if(S.value<=0){
wakeup(S.L);
}
}
将进程在整个运行过程中需要的所有资源,一次性全部地分配给进程,待进程使用完后再一起释放
原文:https://www.cnblogs.com/zyqya/p/12918925.html