В приведенном простом случае разблокировка в обратном порядке не требуется, чтобы избежать тупика.
Однако , поскольку код усложняется, разблокировка в обратном порядке помогает поддерживать правильное упорядочение блокировки.
Рассмотрим:
A.lock();
B.lock();
Foo();
A.unlock();
Bar();
B.unlock();
Если Bar()
попытается вернуть А, вы фактически нарушили порядок блокировки. Вы держите B, а затем пытаетесь получить A. Теперь он может тупик.
Если вы разблокируете в стиле обратного порядка (что очень естественно, если вы используете RAII):
A.lock();
B.lock();
Foo();
B.unlock();
Bar();
A.unlock();
тогда не имеет значения, попытается ли Bar()
захватить блокировку, так как порядок блокировки будет сохранен.