Если бы это было правдой, это была бы какая-то ужасная ошибка процессора, которая была бы характерна для одной конкретной модели или степпинга.То, что 32-разрядные операции чтения и записи являются атомарными, является фундаментальным для свойств платформы x86, и на них полагаются Windows, Linux, а также множество прикладных программ.
Единственное, что я могу думать об этом, этоВозможно, речь идет о переходе от одноядерных процессоров без гиперпоточности к одноядерным процессорам с гиперпоточностью.В одноядерном процессоре x86 без гиперпоточности отдельные инструкции (например, приращение), которые выполняют операции чтения-изменения-записи для выровненных 32-разрядных переменных, являются атомарными даже без префикса блокировки.(Они не гарантированы, они просто случаются.) ЦП с гиперпоточностью ведет себя очень похоже на ЦП с двумя физическими ядрами, поэтому операции чтения-изменения-записи (кроме обмена) не гарантируются атомарными безпрефикс блокировки.
Это не имеет значения, поскольку подавляющее большинство процессоров, с которыми столкнется ваше программное обеспечение, будет иметь более одного ядра, так или иначе.Таким образом, даже операции чтения-изменения-записи с одной инструкцией для выровненных 32-разрядных значений не будут атомарными, если они не заблокированы.(Exchange является исключением, поскольку он заблокирован даже без префикса.)