Я узнал, что должен разблокировать обратный порядок заблокировать порядок. Например.
A.lock();
B.lock();
B.unlock();
A.unlock();
Но, что происходит, если мне действительно нравилось это:
A.lock();
B.lock();
A.unlock();
B.unlock();
Я пытаюсь сделать сценарий мертвой блокировки, но если бы я всегда блокирую более раннее затем B, затем я не знаю, как мертвая блокировка произошла бы. Вы помогли бы мне?
Порядок разблокировки просто означает, что вы предотвращаете блокировки, получая блокировки в фиксированном порядке, и не получаете блокировки снова после начала разблокировки.
Я не думаю, что порядок разблокировок здесь имеет какое-то значение (на самом деле, было бы полезно как можно быстрее разблокировать замок, даже если он не в порядке)
.Ваш пример никогда не зайдет в тупик. Разблокировка в обратном порядке не важна, это блокировка в последовательном порядке. Это будет дедлок, даже если разблокировка в обратном порядке
Thread 1
A.lock();
B.lock();
B.unlock();
A.unlock();
Thread 2
B.lock();
A.lock();
A.unlock();
B.unlock();
Порядок разблокировки не влияет на то, насколько Ваша система склонна к дедлоку, однако есть одна причина подумать о порядке разблокировки:
Чтобы избежать дедлока, Вы должны убедиться, что Ваш замок/разблокировка парные, в том, что Вы никогда не пропустите разблокировку. Как стилистический подход, заметно имея блоки кода, которые отвечают за парную блокировку, намного проще визуально идентифицировать, что блокировка и разблокировка сопряжены. Конечный эффект заключается в том, что явно корректный код, скорее всего, возьмет и отпустит блокировки, как вы описали
.Я не думаю, что здесь произойдет дедлок. Общая концепция дедлока заключается в том, что один поток ждет, когда какой-то ресурс будет заблокирован другим, в то время как другой поток нуждается в ресурсе, заблокированном первым, чтобы закончить работу и освободить ресурс, который нужен первому.