Как работает протокол приоритета потолка

В приведенном ниже сценарии изменение приоритета задачи 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.

Другие вопросы по тегам