在下面的场景中,当释放锁时,任务t1的优先级将如何变化,假设Sem_Take()和Sem_Give()是锁定和释放方法。
据我所知,使用优先级上限协议会在资源被锁定后立即提升任务的优先级,但在释放锁定时会发生什么。
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将如何工作。
答案 0 :(得分:1)
创建优先级上限以避免优先级倒置。一个良好实现的算法将始终为每个进程提供与该进程持有的每个资源(在本例中为信号量)相关联的最高优先级。所以特别关于你的代码样本:在服用S1之后,进程优先级将提升到4,然后在服用S2之后它将再次提升到6.在释放S1时,优先级仍为6(S2仍然保持)。在释放S2时,它应该恢复到优先级== 2。