Я хотел бы использовать атомарные переменные в C.
Я попробовал следующие предложенные встроенные функции в gcc, но получил ошибку ссылки undefined reference to `_sync_fetch_and_add'
.
type __sync_fetch_and_add (type *ptr, type value);
type __sync_fetch_and_sub (type *ptr, type value);
type __sync_fetch_and_or (type *ptr, type value);
type __sync_fetch_and_and (type *ptr, type value);
type __sync_fetch_and_xor (type *ptr, type value);
type __sync_fetch_and_nand (type *ptr, type value);
Я предполагаючто моя архитектура их не поддерживает .. Я подумал, что, вероятно, потому что это не INTEL, а просматривая информацию о процессоре, я обнаружил, что у меня есть процессор Intel.
>less /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 26
model name : Intel(R) Xeon(R) CPU X5570 @ 2.93GHz
stepping : 5
cpu MHz : 1600.000
>uname -a
Linux xxxxxx 2.6.24.7-108.el5rt #1 SMP PREEMPT RT
Mon Mar 23 10:58:10 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
Знаете ли вы другие способы или библиотеки, которыеможет реализовать атомарные переменные для моей архитектуры или если я делаю что-то не так (возможно, некоторые флаги компиляции, которые я должен проверить)?
ПРИМЕЧАНИЕ: я нашел stdatomic.h
, но, к сожалению, только для C ++
Пример использования:
int i =0;
i = _sync_fetch_and_add (&i,2);