几年前对PV操作进行了基本的理解PV操作的初次理解。
现在进一步理解同步与互斥方向的问题。主要以题的方式理解。
如上述题,是20年408的真题。
首先要明白信号量的问题,信号量(semaphore)。
信号量semaphore>0的时候,表示还有空余的资源可以使用。当V操作一个资源的时候semaphore-1。
信号量semaphore<0的时候,表示还有空余的资源可以使用。当P操作一个资源的时候,semaphore+1。
了解了信号量之后就能够很好的理解上述题目了。
//首先设置信号量,表示从某个路径到某个路径的执行。
例如AC表示,从A->C的执行。
semaphore AC =0;//A到C
semaphore BC =0;//B到C
semaphore CD =0;//C到E
semaphore DE =0;//D到E
//执行A
void A()
{
while(true)
{
开始操作A
signal(AB);//释放A
}
}
//执行B
void B(){
while(true){
开始操作B
signal(BC);//释放B
}
}
//执行C
void C(){
while(true)
{
//因为C执行的条件是AB都已经执行了,所以需要等待AB
wait(AB);//等待A
wait(BC);//等待B
开始操作C
signal(CD);//释放C
}
}
//执行D
void D(){
while(true)
{
开始操作D
signal(DE);//释放D
}
}
//执行E
void E(){
while(true)
{
//因为E执行的条件是CD都已经执行了,所以需要等待CD
wait(ce);//等待C
‘wait(de);//等待D
开始操作E//释放E
}
}
PV操作的关键是,资源只有一个,或是有执行的顺序。
如上述,就完成了该题的PV操作了。
后续理解待更新~ ~ ~