一般信号量

「一般信号量」指的是一种特殊的信号量,其取值允许为非负整数,主要用于进程间的一般进程同步。设 为一个记录性数据结构,一个分量为整型量 value,另一个为信号量队列 queue,P 和 V 操作原语分别定义为

  • ,将信号量 s 减去 1,若结果小于 0,则调用 的进程被置为等待信号量 s 的状态
  • ,将信号量 s 加 1,若结果不大于 0,则是放一个等待信号量 s 的进程。
typedef struct semaphore {
	int value;
	struct pcb *list;
};

void P(semaphore &s){
	s.value--;
	if(s.value<0) sleep(s.list);
}

void V(semaphore &s){
	s.value++;
	if(s.value<=0) wakeup(s.list);
}