跳到主要内容

Semaphore

定义​

信号量(Semaphore)是荷兰计算机科学家 Dijkstra 提出的一种用于进程同步与互斥的机制,通过两个原子操作 P(wait)和 V(signal)来访问。

整型信号量​

wait(S){
while(S <= 0); // 忙等待
S--;
}

signal(S){
S++;
}

记录型信号量​

typedef struct{
int value;
struct process *L;
} semaphore;
  • wait(S):S.value--,若小于 0 则阻塞当前进程
  • signal(S):S.value++,若小于等于 0 则唤醒等待队列中的进程

应用​

  • 互斥:初始值为 1 的信号量保护临界区
  • 同步:初始值为 0 的信号量实现前驱关系
  • 资源计数:初始值为资源总数的信号量管理有限资源