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