PV 操作

P 操作和 V 操作是信号量(Semaphore)机制中的两个基本操作,它们由荷兰计算机科学家艾兹赫·戴克斯特拉(Edsger Dijkstra)引入,用于控制并发系统中的资源访问和进程同步。

  • P 操作:也称为等待操作(Wait)或减操作(Decrement),在英文中常用waitdown来表示。执行 P 操作时,即尝试申请资源,若 S>0,意味着有资源可以申请,操作后,S=S-1 意味着资源减少
  • V 操作:也称为信号操作(Signal)或加操作(Increment),在英文中常用signalup来表示。执行 V 操作时,即尝试释放资源,执行 Signal 操作之后,S=S+1,意味着资源数增加

用代码可表示为

P(Semaphore S) {
    if (S <= 0) {
        block();  // 将进程放入等待队列并阻塞
    } else {
        S = S - 1;
    }
}

V(Semaphore S) {
    S = S + 1;
    if (S<= 0) { // 表示之前至少有一个进程在等待
        wakeup();  // 唤醒一个进程
    }
}