记录型信号量:P 申请资源,V 释放资源

信号量 S

S.value
1
S.L 等待队列

P(S) / wait(S)

S.value--;
if (S.value < 0)
block(S.L);

P 操作先扣资源,再判断是否需要阻塞。

V(S) / signal(S)

S.value++;
if (S.value <= 0)
wakeup(S.L);
当前动作:未开始

V 操作释放资源;若仍有人等待,就唤醒队首进程。