Если это единственный задействованный мьютекс, это не так. Один и тот же поток может блокировать один и тот же мьютекс несколько раз, если он разблокирует его равное количество раз.
Вызов MethodA
производит следующую последовательность операций в том же потоке:
- Блокировка
objectLock
.
- Звоните
MethodB
.
- Замок
objectLock
.
- Разблокировать
objectLock
.
- Выход
MethodB
.
- Разблокировать
objectLock
.
Итак, objectLock
заблокирован дважды и не заблокирован дважды, но тупика нет:
- Если другой поток попытается вызвать
MethodA
, он просто заблокирует первую блокировку, но не заблокируется.
- Если звонит
MethodB
, то же самое произойдет.
- И если первый поток вызовет
MethodB
, а затем другой поток вызовет MethodA
, снова произойдет «нормальная» блокировка, но не тупик.