Как работает протокол приоритета потолка
В приведенном ниже сценарии изменение приоритета задачи 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.
1 ответ
Приоритетный потолок был создан, чтобы избежать инверсии приоритетов. Хорошо реализованный алгоритм всегда дает каждому процессу наивысший приоритет, связанный с каждым из ресурсов, хранящихся в этом процессе (в данном случае семафоры). В частности, что касается вашего примера кода: после взятия S1 приоритет процесса будет повышен до 4, затем после взятия S2 он будет снова повышен до 6. После освобождения S1 приоритет по-прежнему равен 6 (S2 все еще удерживается). После освобождения S2 он должен вернуться к приоритету == 2.