P 操作和 V 操作是信号量(Semaphore)机制中的两个基本操作,它们由荷兰计算机科学家艾兹赫·戴克斯特拉(Edsger Dijkstra)引入,用于控制并发系统中的资源访问和进程同步。
wait
或down
来表示。执行 P 操作时,即尝试申请资源,若 S>0
,意味着有资源可以申请,操作后,S=S-1
意味着资源减少signal
或up
来表示。执行 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(); // 唤醒一个进程
}
}