二元信号量

「二元信号量」是信号量中的一种,指的是信号量的值仅允许取 0 或 1,主要用于互斥变量。

为一个记录型数据结构,一个分量为 value,它仅能取值 01,另一个分量为信号
量队列 queue,把二元信号量上的 P 、V 操作记为 BPBVBPBV 操作原语的定义如下:

typedef struct semaphore {
	int value;
	struct pcb *list;
};

void BP(binary_semaphore &s){
	if(s.value==1)
		s.value=0;
	else
		sleep(s.list);
}

void BV(binary_semaphore &s){
	if(s.list is empty())
		s.value=1;
	else
		wakeup(s.list);
}