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

Обновление : Я только что наткнулся на это в Eric Ответ Липперта на другой вопрос (он цитирует спецификацию):

Читает и записывает другие типы, в том числе длинные, улонги, двойные и десятичный, а также определяемый пользователем типы, не гарантируются атомный.

Хорошо, поэтому чтение double будет , а не атомарным. Это означает, что значение может быть изменено в середине чтения, верно? Так как же атомарно прочитать значение double ?


Я заметил, что существует метод Interlocked.Read для длинных значений. Для меня это имеет смысл, так как чтение 64-битного значения должно потребовать двух шагов и, следовательно, должно быть связано с условиями гонки, как и любое другое неатомарное действие.

Но нет Interlocked.Read для двойных значений, хотя System.Double является 64-битным значением.

Я наблюдаю странное поведение в моей программе, когда мой графический интерфейс отображает double в текстовом поле, а это double также часто обновляется другими потоками, показывает правильное значение (около 200,0) большую часть времени, а затем случайным образом показывает ошибочное значение (например, -0,08) , иногда .

Возможно, это ошибка проблема с потоком, или, может быть, что-то еще. Но сначала я хотел сузить круг возможных вариантов. Итак: чтение double потокобезопасно?

15
задан Community 23 May 2017 в 12:17
поделиться