Мне нужно понять забор памяти в многоядерных машинах. Скажем, у меня есть этот код
Ядро 1
mov [_x], 1; mov r1, [_y]
Core 2
mov [_y], 1; mov r2, [_x]
Теперь неожиданными результатами без забора памяти было бы то, что как r1, так и r2 могут быть 0 после выполнения. На мой взгляд, чтобы противостоять этой проблеме, мы должны поместить забор памяти в оба кода, поскольку поставить его только в один, все равно не решить проблему. Что-то вроде следующего...
Ядро 1
mov [_x], 1; memory_fence; mov r1, [_y]
Core 2
mov [_y], 1; memory_fence; mov r2, [_x]
Насколько я понимаю, я все еще что-то пропущу? Предположим, что архитектура x86. Кроме того, может ли кто-нибудь сказать мне, как поместить забор памяти в код на С++?