Операции атома С++ для блокировок

Я реализую механизм блокировки, используя атомарные (двойные) команды сравнения и свопа, например. cmpxchg16b

В настоящее время я пишу это в сборке и затем связываю его. Однако я задавался вопросом, есть ли способ заставить компилятор сделать это для меня автоматически? например блок объемного кода с "атомарным" и попробуйте понять, как реализовать код как атомную инструкцию в базовой архитектуре процессора (или генерировать ошибку во время компиляции, если базовая арка не поддерживает ее)?

P.S. Я знаю, что у gcc есть встроенные модули (по крайней мере для CAS)

http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Atomic-Builtins.html#Atomic-Builtins

Ответ 1

Уже kindof ответил здесь.

Стандарт С++ 0x предоставит некоторые атомные типы данных, в основном целые и недействительные типы с использованием std:: atomic < > template. В этой статье упоминается проект Boehm atomic_ops, который вы можете скачать и использовать сегодня.

Если нет, не можете ли вы реализовать встроенный ассемблер в компиляторе? Я знаю, что MSVC имеет ключевое слово __ asm для встроенных ассемблерных подпрограмм. Google говорит yes, gcc может сделать это тоже.

Ответ 2

Будущий стандарт С++ 0x для С++ будет поддерживать атомарные операции & c - см., например, http://www.open-std.org/JTC1/sc22/wg21/docs/papers/2007/n2427.html для разумного обсуждения. До тех пор, пока не будет одобрен и широко распространен будущий стандарт, конечно, нет возможности "переносимости" таких функций у компиляторов; если вас интересуют конкретные компиляторы за пределами gcc, возможно, вы можете открыть другой вопрос именно о них.