Объяснение
Deadlock возникает при циклическом ожидании ресурсов. Единый порядок захвата блокировок устраняет цикл. Lock-free не означает отсутствия ожидания у каждого отдельного потока и не отменяет модель памяти.
Задача для самостоятельного решения
Поток 1 захватил A и ждёт B; поток 2 захватил B и ждёт A. Исправьте протокол.
Показать разбор ответа
Оба потока должны захватывать сначала A, затем B. Если ресурс уже занят, второй поток ждёт, не удерживая B, поэтому замкнутого цикла не возникает.