Давайте иметь функцию, которая увеличивает глобальное атомарное целое число, а затем мы сохраняем это значение в неатомарной локальной переменной.
_Atomic int atom = 0 ;
void function( void )
{
int a = atom++ ;
}
Будет ли a
всегда иметь уникальное значение при использовании приведенного выше кода с несколькими потоками. Если да, как предположили некоторые комментаторы, то какой смысл в таких функциях, как atomic_fetch_add
а>.
atomic_global_integer
на самом деле является атомарным? Если бы это было так,a
не получило бы одинаковое значение в двух потоках. - person interjay   schedule 11.12.2013_Atomic int;
.a
определенно может получить такое же значение в первом случае. - person this   schedule 11.12.2013atomic_global_integer
в другом месте. - person interjay   schedule 11.12.2013atomic_global_integer
где-то еще, а не в этом одном выраженииatomic_global_integer++
. Вы говорите «только в этой функции», но это не исключает другой фрагмент кода в той же функции. Альтернативой является то, что в вашей реализации C есть ошибка, илиatomic_global_integer
было объявлено неправильно (не какatomic
), или какая-то проблема с препроцессором изменяет код (например, некоторые#define
изменяютatomic_global_integer
на что-то другое), или что поведение, которое вы предлагаете, не было реально наблюдается. - person Eric Postpischil   schedule 11.12.2013a
не может произойти еще одно приращение? Позвольте мне отредактировать для ясности. - person this   schedule 11.12.2013a
все равно будут уникальными. - person interjay   schedule 11.12.2013atomic_global_integer
. Кроме того, как вы пришли к выводу, что разные потоки могут получить одно и то же значение? - person Eric Postpischil   schedule 11.12.2013