Операции атома С++ для блокировок
Я реализую механизм блокировки, используя атомарные (двойные) команды сравнения и свопа, например. 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, возможно, вы можете открыть другой вопрос именно о них.