3

在下面的场景中,假设 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 将如何工作。

4

1 回答 1

2

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

于 2016-06-01T05:33:01.493 回答