记录型信号量: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 操作释放资源;若仍有人等待,就唤醒队首进程。