优先级上限协议如何工作

How does priority ceiling protocol works

在下面的场景中,假设Sem_Take() 和Sem_Give() 是锁定和释放方法,任务t1 的优先级将如何在释放锁时发生变化。

我知道使用优先级上限协议会在资源被锁定后立即提高任务的优先级,但是当锁定被释放时会发生什么。

    void t1()//Initial priority 2
{
    int a;
    Sem_take(S1); //priority ceiling for S1 is 4
    .
    .
    Sem_take(S2);//priority ceiling for S2 is 6
    .
    .
    Sem_Give(S1);
    .//What is the priority at this line?
    .
    Sem_Give(s2);
    .//What is the priority at this line?
    .
}

同样在上述场景中,信号量锁定和释放不匹配,这是错误的,但程序可能会错误地这样做,那么在这种情况下 PCP 将如何工作。

创建优先级上限是为了避免优先级倒置。一个良好实施的算法总是会为每个进程提供最高优先级,该优先级与该进程持有的每个资源(在本例中为信号量)相关联。因此,特别是关于您的代码示例:在获取 S1 之后,进程优先级将提高到 4,然后在获取 S2 之后它将再次提升到 6。释放 S1 优先级仍然是 6(S2 仍然保留)。释放 S2 后,它应该恢复到优先级 == 2。