Карточка Senior GCD и OperationQueue обновлено

Инверсия приоритетов

Вопрос

Что такое инверсия приоритетов и как GCD с ней справляется?

Попробуйте сами

Ответьте про себя или вслух, потом откройте ответ и сверьтесь.

Показать ответ и разбор

Коротко

Высокоприоритетная задача ждёт ресурс, захваченный низкоприоритетной, а ту вытесняют задачи среднего приоритета. GCD повышает QoS очереди, когда на неё делают sync или ставят блок с высоким QoS (QoS override).

Ответ

Высокоприоритетная задача ждёт ресурс, захваченный низкоприоритетной, а ту вытесняют задачи среднего приоритета. GCD повышает QoS очереди, когда на неё делают sync или ставят блок с высоким QoS (QoS override).

Разбор

Семафоры не знают, кто их освободит, и override не работает. Поэтому для взаимного исключения лучше os_unfair_lock, Mutex или serial-очередь.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме