Использование GCC atomic builtins?
Я пытаюсь использовать __atomic_load_n С gcc атомарные примитивы страница, компиляции с
gcc -Wall -march=i686 -std=gnu99 ll.c -o ll
но он говорит мне, что он не может
предупреждение: неявная декларация функции ‘__атомным_нагрузка_Н’
Я думал, что этого будет достаточно, чтобы обеспечить gcc С arch и march флаги (и убедитесь, установив std=gnu99 флаг), но безрезультатно. На самом деле, даже если я тестирую для общего __GCC_VERSION__ или __GNUC__ макросы не имеют значения... но у меня есть довольно ванильный gcc установка, тот, который поставляется в Ubuntu.
код выглядит так: это функция, которая никогда не вызывается (пока), поэтому проблема во время компиляции.
type* func(type* p) {
    type* q = __atomic_load_n (p, __ATOMIC_SEQ_CST);
}
1 ответов
до GCC 4.6.3 встроенные компиляторы для атомарных операций были чистым расширением компилятора, и в GCC они были сгруппированы в __sync_* семейство функций.
начиная с версии 4.7.0, как новые стандарты c++11, так и стандарты C11 были завершены, и GCC обновил свои атомарные встроенные модули, чтобы лучше отразить новую модель памяти этих двух новых языковых версий. Новые функции сгруппированы в __atomic_* семья.
тем не менее, старые встроенные являются все еще доступен и документация говорит:
Это всегда безопасно заменить
__syncС__atomicзвонок с помощью__ATOMIC_SEQ_CSTмодель памяти.
