Нет, это не может тупик; есть только один объект блокировки, и не существует точки расширения, которая позволила бы вам сделать что-то грязное, пока блокировка удерживается. Однако, если вы используете блокировку, вам, вероятно, следует прояснить, каких сценариев вы пытаетесь избежать. Хотя значение на самом деле очень тонкое, мне интересно, может ли volatile
работать здесь без необходимости каких-либо блокировок. Или Interlocked
на int
, который всегда либо 0
, либо 1
.
Но, конечно, похоже, что это сработает; В любом случае, bool всегда атомарен, поэтому блокировка в действительности действует только как барьер памяти, избегая проблем с кешем (следовательно, почему volatile также может работать). И помните, что каждый раз, когда вы получаете значение, оно устарело и, возможно, уже неверно. Это было правдой в момент чтения, хотя.