Вы объяснили бы упорядочивание блокировки?

Я узнал, что должен разблокировать обратный порядок заблокировать порядок. Например.

A.lock();
B.lock();
B.unlock();
A.unlock();

Но, что происходит, если мне действительно нравилось это:

A.lock();
B.lock();
A.unlock();
B.unlock();

Я пытаюсь сделать сценарий мертвой блокировки, но если бы я всегда блокирую более раннее затем B, затем я не знаю, как мертвая блокировка произошла бы. Вы помогли бы мне?

27
задан Petr Pudlák 22 December 2015 в 10:58
поделиться

4 ответа

Порядок разблокировки просто означает, что вы предотвращаете блокировки, получая блокировки в фиксированном порядке, и не получаете блокировки снова после начала разблокировки.

Я не думаю, что порядок разблокировок здесь имеет какое-то значение (на самом деле, было бы полезно как можно быстрее разблокировать замок, даже если он не в порядке)

.
21
ответ дан 28 November 2019 в 04:25
поделиться

Ваш пример никогда не зайдет в тупик. Разблокировка в обратном порядке не важна, это блокировка в последовательном порядке. Это будет дедлок, даже если разблокировка в обратном порядке

Thread 1

A.lock();
B.lock();
B.unlock();
A.unlock();

Thread 2

B.lock();
A.lock();
A.unlock();
B.unlock();
9
ответ дан 28 November 2019 в 04:25
поделиться

Порядок разблокировки не влияет на то, насколько Ваша система склонна к дедлоку, однако есть одна причина подумать о порядке разблокировки:

Чтобы избежать дедлока, Вы должны убедиться, что Ваш замок/разблокировка парные, в том, что Вы никогда не пропустите разблокировку. Как стилистический подход, заметно имея блоки кода, которые отвечают за парную блокировку, намного проще визуально идентифицировать, что блокировка и разблокировка сопряжены. Конечный эффект заключается в том, что явно корректный код, скорее всего, возьмет и отпустит блокировки, как вы описали

.
1
ответ дан 28 November 2019 в 04:25
поделиться

Я не думаю, что здесь произойдет дедлок. Общая концепция дедлока заключается в том, что один поток ждет, когда какой-то ресурс будет заблокирован другим, в то время как другой поток нуждается в ресурсе, заблокированном первым, чтобы закончить работу и освободить ресурс, который нужен первому.

Дальнейшее чтение

2
ответ дан 28 November 2019 в 04:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: