Я запутался в атомарных переменных C ++.Если у меня есть атомарный x, который я хочу увеличить в одном потоке и прочитать в другом, могу ли я сделать ++ x или мне нужно сделать x.atomic_fetch_add (1).В ветке читатель могу ли я сделать что-то вроде cout << x;или я должен сделать cout << x.load (). </p>
Если у меня есть
int x;
atomic<bool> y;
, то в первом потоке
if (!y)
{
x = 23;
y = true;
}
и во втором потоке
if (y)
{
cout << x;
y = false;
}
Гарантируется ли, что поток два увидит значение (не атомарное) x как 23. Если нет, если я изменю доступ к y для использования загрузки и сохранения, это изменит?Гарантируется ли, что второй поток увидит результат всех неатомарных операций, которые выполняются до того, как первый поток установит для y значение true?
Может ли кто-нибудь предложить книгу, в которой эти детали будут четко объяснены.