Одиночные чтения логических значений или ссылок на объекты являются атомарными. Таким образом, если вы сравниваете одно общее значение с константой или локальной переменной, «блокировка» не требуется. Как сказал Джон, вам нужно будет использовать Interlocked.CompareExchange
, чтобы убедиться, что вы читаете последнее записанное значение, если общие переменные не равны volatile
.
Если оба сравнения используются совместно, вам понадобится реальная блокировка. Не существует способа атомарного сравнения двух общих значений AFAIK.
Обновление:
Я рекомендую ввести явные блокировки для общих данных. Имейте в виду, что исходный код был полностью поврежден, поэтому не стесняйтесь менять его.
Если вы подумаете об этом, что бы вы сделали с результатом сравнения? Это на самом деле не имеет смысла; как только у вас будет результат, это может быть неправильно. Блокировка должна храниться дольше, чем просто для того, чтобы сравнение было полезным для чего-либо.