「二元信号量」是信号量中的一种,指的是信号量的值仅允许取 0 或 1,主要用于互斥变量。
设 value
,它仅能取值 0
和 1
,另一个分量为信号
量队列 queue
,把二元信号量上的 P 、V 操作记为 BP
和 BV
,BP
和 BV
操作原语的定义如下:
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);
}