Использование 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 модель памяти.