Это правильный способ атомарного чтения и записи 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; следовательно, создание барьера памяти?

Ответы на вопрос(3)

Ваш ответ на вопрос