Я думаю, что они пытаются объяснить, что типы данных, изначально реализованные аппаратным обеспечением, обновляются в аппаратном обеспечении таким образом, что чтение из другого потока никогда не даст вам «частично» обновленное значение.
Рассмотрим 32-битное целое число на 32-битной машине.Он записывается или читается полностью в 1 цикле инструкций, в то время как типы данных больших размеров, скажем, 64-битное int на 32-битной машине, потребуют больше циклов, следовательно, теоретически поток, записывающий их, может быть прерван междуэти циклы, следовательно, значение не в допустимом состоянии.
Никакая используемая строка не сделает ее атомарной, так как строка является конструкцией более высокого уровня и не реализована в оборудовании.Редактировать: Согласно вашему комментарию о том, что вы (не) имели в виду при переходе на строку, это не должно иметь никакого значения для полей, объявленных после, как уже упоминалось в другом ответе, компилятор будет выравнивать поля по умолчанию.
Причинадело не в том, что, как указано в статье, речь идет о том, как современные процессоры реализуют инструкции.Ваш стандартный код C / C ++ должен работать точно так же на 16- или 64-битной машине (только с разницей в производительности), однако, если вы предполагаете, что будете работать только на 64-битной машине, то все, что 64-битное или меньше, является атомарным.(SSE и т. Д. В сторону)