Это зависит.
Язык C ++ ничего не говорит о потоках или атомарности.
Но на большинстве современных ЦП чтение целого числа является атомарной операцией, что означает, что вы всегда будете читать согласованное значение, даже без мьютекса.
Однако , без мьютекса или какой-либо другой формы синхронизации, компилятор и ЦП могут свободно переупорядочивать операции чтения и записи, поэтому все более сложное, включая доступ к нескольким переменным, все еще небезопасно в общий случай.
Предполагая, что поток записи обновляет некоторые данные, а затем устанавливает целочисленный флаг, чтобы сообщить другим потокам, что данные доступны, это можно переупорядочить, чтобы установить флаг перед обновлением данных. Если вы не используете мьютекс или другую форму барьера памяти.
Так что, если вам нужно правильное поведение, вам не нужен мьютекс как таковой, и это не проблема, если другой поток записывает переменную во время чтения. Это будет атомарно, если вы не работаете на очень необычном процессоре. Но вам нужно нужен какой-то барьер памяти для предотвращения переупорядочения в компиляторе или процессоре.