С многоядерной обработкой RISC и отдельным ядром c в то время как память находится в смеси современного процессора, не более того, любая «тривиальная» высокоуровневая конструкция для чтения или записи на высоком уровне (или, во всяком случае, многократные 8086 «атомные» инструкции по сборке) можно считать атомным. Действительно, если инструкция ассемблера специально не спроектирована как атомарная, она, вероятно, не является атомарной - и это включает в себя большинство механизмов чтения в памяти. Даже длинное целое число, читаемое на уровне ассемблера, может быть повреждено одновременной записью из другого процессорного ядра, которое использует одну и ту же память и использует операции обновления асинхронного кэша на уровне RISC-процессора. Помните, что на процессоре, состоящем из нескольких ядер RISC, даже инструкции на языке ассемблера - это просто инструкции кода более высокого уровня! Вы никогда не знаете, как они реализуются на уровне бит, и может быть не совсем то, что вы ожидали, если бы вы читали старое руководство по ассемблеру 8086 (одноядерное). Windows предоставляет ядерные операторы, совместимые с национальной системой, и вам будет рекомендовано использовать их, а не делать какие-либо базовые предположения об атомных операциях.
Зачем использовать операторы Windows? Потому что одна из первых вещей, которые делает Windows, - это установить, на что машина работает. Одним из ключевых аспектов, которые он обеспечивает, становится всецело, какие атомарные операции существуют и как они будут работать. Если вы хотите, чтобы ваш код работал в будущем на любом будущем процессоре, вы можете либо дублировать (и постоянно обновлять) все эти усилия в своем собственном коде, либо вы можете использовать тот факт, что Windows все это уже при запуске. Затем он включил необходимый код в свой API во время выполнения.
Прочитайте страницы MSDN по атомным операциям. Интерфейс Windows API подходит для вас. Иногда они кажутся неуклюжими или неуклюжими, но они являются будущим доказательством, и они всегда будут работать точно так же, как это говорит на жестяне.
Как узнать это? Ну, потому что, если они этого не сделали, тогда вы не сможете запускать Windows. Полная остановка. Не берите свой собственный код.
Всякий раз, когда вы пишете код, всегда полезно понять Parsimony и рассмотреть Occam's razor. Другими словами, если Windows уже делает это, и вашему коду требуется Windows для запуска, то используйте то, что Windows уже делает, вместо того, чтобы опробовать множество альтернативных и все более сложных гипотетических решений, которые могут работать или не работать. Выполнение чего-либо еще - это просто трата вашего времени (если, конечно, это то, что вы делаете).
+1, очень хорошие очки. Для кого-то заинтересованного, посетите, например, http://en.wikipedia.org/wiki/Memory_barrier и связанную информацию. – mghie