http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Atomic-Builtins.html
Я считаю, что следующий код увеличивает значение of var атомарно.
volatile int var = 0;
__sync_fetch_and_add( &var, 1 )
Я понял вышеупомянутые коды как следующую логику :
Однако я сомневаюсь, что следующее также является атомарным
volatile int var = 0;
volatile int num = 1;
__sync_fetch_and_add( &var, num )
Поскольку это можно интерпретировать как
После выполнения # 2, но до # 3, ЦП / поток прерывается, а другой ЦП / поток обновляется значение переменной num.
Другими словами, при использовании _ sync * () gcc, могу ли я использовать в качестве второго аргумента переменную, а не константу?
Разве это не нарушает атомарность?