Протокол потолка приоритетов
Правило блокировок для систем реального времени: каждому ресурсу назначается потолок приоритета, и инверсия приоритетов с взаимной блокировкой попросту не возникают.
Каждому мьютексу заранее назначается потолок — наивысший приоритет среди всех задач, которые когда-либо его захватят. В простейшей форме, протоколе непосредственного потолка (immediate ceiling, «highest locker»), задача, захватившая замок, сразу получает приоритет потолка и теряет его только при освобождении. Ни одна другая задача, которой нужен тот же ресурс, за это время не может даже стать готовой к выполнению.
Описали его Ша, Раджкумар и Леховчки в 1990 году — в той же статье, что ввела наследование приоритета. Наследование реагирует на уже возникший конфликт; потолок его предотвращает. Выигрыш доказуем: задача блокируется не более одного раза и не дольше одной критической секции, а циклические ожидания невозможны. Цена — нужно статически знать, кто что использует, но именно такого знания и требуют сертифицируемые системы. В Ada это Ceiling_Locking, в POSIX — PTHREAD_PRIO_PROTECT, а модель ресурсов OSEK/AUTOSAR построена на нём.