Это может произойти из-за инверсии приоритетов.
Инверсия приоритетов возникает, когда задача с низким приоритетом удерживает ресурс (например, мьютекс), необходимый задаче с высоким приоритетом. Задача с высоким приоритетом блокируется, ожидая освобождения ресурса. При этом задача с низким приоритетом может быть вытеснена задачей со средним приоритетом, которая не нуждается в этом ресурсе. В итоге, задача со средним приоритетом выполняется, пока задача с низким приоритетом, удерживающая ресурс, и задача с высоким приоритетом, заблокированная, ожидают. Задача с высоким приоритетом фактически ожидает, пока выполнятся задачи со средним приоритетом и задача с низким приоритетом освободит ресурс.
Решение проблемы инверсии приоритетов:
В iOS, Grand Central Dispatch (GCD) и Operation Queues имеют механизмы для минимизации инверсии приоритетов, но в сложных сценариях с блокировками такие ситуации все еще могут возникнуть при неправильном использовании.