贰叁肆 - PV操作
type: channel
link: https://www.ersansi.top/index.php/tag/PV%E6%93%8D%E4%BD%9C/
items: 网络工程师——进程管理——PV操作

网络工程师——进程管理——PV操作
type: item
date: 2022-09-08T22:50:00+08:00
description: 进程管理——PV操作 PV操作是用来解决互斥和同步之间的问题。 临界区：每个进程中访问临界资源的那段代码称为临界区。 信号量：信号量是一种特殊的变量，可以理解为计数器，通过PV操作控制计数器来实现进程的互斥和同步。信号量可以分为互斥信号量 同步信号量。 PV操作：解决互斥和同步的问题，PV操作是分开来看的； P操作：使S=S-1，若S≥0，则该进程继续执行，否则该进程排入等待队列。 V操作：使S=S+1，若S≤0，唤醒等待队列中的一个进程。 互斥信号量：为了解决资源一次只能被一个进程占用的问题； 同步信号量：代表资源的个数 例题 目前又2个凳子，但是有4个人，分别为A、B、C、D。 A现在需要坐凳子，在坐之前先判断凳子是否被占用，就会先进行一个P操作： 因为有2个凳子，P操作时S=S-1， 2-1=1，S=1 当S≥0时，进程执行，所以A坐下。 现在到B想要坐下，也是先进行P操作，因为有一个凳子已经被A占了，所以P操作是1-1=0，当S≥0时，进程执行，所以B也可以坐下。 现在到C想要坐下，也是P操作，因为2个凳子都已经被占用，所以P操作的结果为0-1=-1，S=-1，当S≥0时程序执行，否则等待，所以现在C只能等待。 现在到D想要坐下，先进行P操作，-1-1=-2，S=-2，S小于0，所以D进入等待队列。 P操作执行完成后执行V操作，V操作=S=S+1,首先时A进行V操作，目前凳子数为-2，进行V操作： S=S+1=-2+1=-1，当S≤0，唤醒等待队列中的一个进程，所以现在C可以坐下，以此类推，当B进行V操作之后D就可以坐下了。