Атомарные операции C ++ для структур без блокировок

StackOverflow https://stackoverflow.com/questions/930897

  •  06-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

Уже вроде как ответил здесь.

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top