Учитывая ваш пример , и если вы используете Java, то ответ будет "Нет". В Java поток не может появиться и прочитать ваше значение до завершения операции присваивания. В некоторых других языках это может быть другая история.
"Переменные, совместно используемые несколькими потоками (например, переменные экземпляра объектов), имеют атомарное назначение, гарантированное спецификацией языка Java для всех типов данных, кроме длинных и двойных ... Если метод состоит только из единственной переменной доступа или присваивание, нет необходимости делать его синхронизированным для обеспечения безопасности потоков, и нет никаких причин не делать это для производительности. "
ссылка
Если ваш double
или long
объявлен volatile
, то вам также гарантируется, что присвоение является атомарной операцией.
Обновление:
Ваш пример будет работать в C ++ так же, как он работает в Java. Теоретически не существует способа, чтобы порождение потока началось или завершилось до назначения, даже с выполнением вне порядка.
Обратите внимание, что ваш пример ОЧЕНЬ специфичен, и в любом другом случае рекомендуется убедиться, что общий ресурс защищен должным образом. Новый стандарт C ++ предлагает много атомарного материала, так что вы можете объявить вашу переменную как атомарную, и операция присваивания будет видна всем потокам без необходимости блокировки. CAS (сравните и установите) - ваш следующий лучший вариант.