定义
信号量(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 的信号量实现前驱关系
- 资源计数:初始值为资源总数的信号量管理有限资源