У меня есть два потока, которые имеют общую переменную.
Структура кода в основном такая (очень упрощенный псевдокод):
static volatile bool commondata;
void Thread1()
{
...
commondata = true;
...
}
void Thread2()
{
...
while (!commondata)
{
...
}
...
}
Оба потока выполняются, и в какой-то момент Thread1 устанавливает commondata в true. Затем while l oop в Thread2 должно остановиться. Здесь важно то, что Thread2 «видит» изменение, внесенное Thread1 в общие данные.
Я знаю, что наивный метод, использующий изменчивую переменную, неверен и не гарантирует, что он будет работать на каждой платформе.
Достаточно ли хорошо заменить volatile bool commondata
на std::atomic<bool> commondata
?