Подтвердить что ты не робот

Является ли назначение переменных и чтение атомарной работой?

Мне не удалось найти ссылку на это в документах...

Назначает ли двойной (или любой другой простой тип, включая логический) атомную операцию, рассматриваемую с точки зрения потоков?

double value = 0;

public void First() {
 while(true) {
  value = (new Random()).NextDouble();
 }
}

public void Second() {
 while(true) {
  Console.WriteLine(value);
 }
}

В этом примере кода первый метод вызывается в одном потоке, а второй - в другом. Может ли второй метод получить испорченное значение, если он получает свое выполнение при назначении переменной в другом потоке?

Мне все равно, если я получу старое значение, важно только получить допустимое значение (не такое, где установлено 2 из 8 байтов). Я знаю, что это глупый вопрос, но я хочу быть уверенным, потому что я не знаю, как CLR на самом деле устанавливает переменные.

4b9b3361

Ответ 1

Чтобы ответить на ваш вопрос, нет. Присвоения удвоений не гарантируются как атомарные. Документы доступны здесь. В принципе, <= 32-разрядные встроенные типы являются атомарными, >= 64-битные типы не являются. Для атомных операций на 64-битных типах вы можете использовать методы System.Threading.Interlocked