Я реализую механизм без блокировки, используя атомарные (двойные) инструкции сравнения и обмена, например, cmpxchg16b
Я сейчас пишу это в ассемблере, а затем связываю его. Однако мне было интересно, есть ли способ заставить компилятор сделать это для меня автоматически? например блок объемного кода с «атомарным» и выяснить, как реализовать код в качестве атомарной инструкции в базовой архитектуре процессора (или генерировать ошибку во время компиляции, если базовая арка не поддерживает его)
P.S. Я знаю, что у gcc есть некоторые встроенные модули (по крайней мере, для CAS)
http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Atomic-Builtins.html#Atomic-Builtins