Я бы ожидал этого, хотя был бы случай, когда это потенциально могло бы вызвать состояние тупика.
Обычно, код пытается заблокировать a
, а затем переходит к блокировке b
, если это удалось. Это означает, что он будет выполнять код только в том случае, если сможет заблокировать как a
, так и b
. Что ты хочешь.
Однако, если какой-то другой код уже заблокирован на b
, этот код не будет выполнять то, что вы ожидаете. Вам также необходимо убедиться, что везде, где вам нужно было заблокировать как a
, так и b
, вы пытаетесь получить блокировки в том же порядке. Если сначала вы получите b
, а затем a
, это приведет к тупику.