Почему разблокировка двух заблокированных банковских счетов в другом порядке приведет к тупику? - PullRequest
0 голосов
/ 13 сентября 2018

https://stackoverflow.com/a/51890291/462608

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

При переводе денег я изменяю 2 банковских счета. Таким образом, они оба должны быть заблокированы.

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

Пример. Вывод средств со счета А и внесение средств на счет Б.

Итак, я сначала заблокирую A, а затем B. Затем, если я разблокирую B, а затем A, почему это приведет к тупику?

Пожалуйста, объясните.

1 Ответ

0 голосов
/ 13 сентября 2018

Поскольку вы можете встретить следующую последовательность:

  • Поток 1 блокирует A.
  • Поток 2 блокирует B.
  • Поток 1 пытается заблокировать B и блокировать.
  • Поток 2 пытается заблокировать A и блокирует.

Оба потока ждут друг друга, поэтому у вас тупик.

Чтобы избежать этого, вы всегдадолжны приобрести замки в том же порядке.Порядок разблокировки не имеет значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...