Это правильный способ атомарного чтения и записи bool?
Логический флаг переключается двумя потоками. Имеет ли смысл следующий код?
static bool ATOMIC_BOOL_READ( volatile bool& var )
{
return __sync_fetch_and_or(&var, 0);
}
static void ATOMIC_BOOL_WRITE(volatile bool& var, bool newval )
{
__sync_bool_compare_and_swap( &var, !newval, newval);
}
Обратите внимание на несколько вещей:
Я передаю в Bool ссылку. Есть смысл?
Ради бога, я также объявляю это изменчивым.
Функции статичныОбновить:
Основной вопрос, который я хочу задать: в чем разница между атомарностью и барьером памяти? Если поток A выполняетвстроенный атом для переменной foo поток B не может делать НИЧЕГО для переменной foo; следовательно, создание барьера памяти?