Когда у меня есть std::condition_variable cond
и немного bool flag
, я могу ждать его, используя предикат:
cond.wait_for(some_lock, std::chrono::milliseconds(100), { return flag; })
Теперь мне интересно: технически C ++ имеет только правильную модель многопоточной памяти в C++ 11, и доступ к переменной flag
в многопоточном контексте в основном не определен.Поэтому я должен объявить это std::atomic<bool>
, чтобы избежать этого неопределенного поведения, верно?
Мне особенно интересно: если я НЕ объявляю это std::atomic
, может ли это быть, что я читаю устаревшие значения из flag
все время, так как обновление никогда не попадает в основную память?Или это случай "теоретически да, но практически никогда не бывает"?