Карточка Senior GCD и OperationQueue обновлено
Инверсия приоритетов
Вопрос
Что такое инверсия приоритетов и как GCD с ней справляется?
Попробуйте сами
Ответьте про себя или вслух, потом откройте ответ и сверьтесь.
Показать ответ и разбор
Коротко
Высокоприоритетная задача ждёт ресурс, захваченный низкоприоритетной, а ту вытесняют задачи среднего приоритета. GCD повышает QoS очереди, когда на неё делают sync или ставят блок с высоким QoS (QoS override).
Ответ
Высокоприоритетная задача ждёт ресурс, захваченный низкоприоритетной, а ту вытесняют задачи среднего приоритета. GCD повышает QoS очереди, когда на неё делают sync или ставят блок с высоким QoS (QoS override).
Разбор
Семафоры не знают, кто их освободит, и override не работает. Поэтому для взаимного исключения лучше os_unfair_lock, Mutex или serial-очередь.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Барьер для потокобезопасного кеша
Следующий вопрос
DispatchSemaphore для ограничения параллельности
Термины по теме
Ещё по теме «GCD и OperationQueue»
- Асинхронная Operation
- DispatchWorkItem и отмена
- Как дождаться нескольких запросов в GCD
- Задача на Swift: операции с зависимостями и критический путь
- Задача на Swift: OperationQueue с ограничением параллельности
- DispatchQueue.main.sync на главном потоке
- Инструменты GCD и их задачи
- Синхронный доступ к состоянию без очереди