std::atomic появились wait() и notify_one().Это удобная штука для случаев, когда поток должен просто дождаться изменения атомарного значения без
mutex, condition_variable и ручного busy waiting.Раньше для такого обычно оборачивали OS-level примитивы вроде futex или
pthread_cond.Теперь можно писать прямо так:
#include <atomic>
#include <thread>
std::atomic<bool> ready{false};
void waiter() {
ready.wait(false, std::memory_order_acquire);
}
void notifier() {
ready.store(true, std::memory_order_release);
ready.notify_one();
}
Что здесь происходит:
wait(false) блокирует поток, пока ready остаётся false.Другой поток делает
store(true) и будит ожидающего через notify_one().Главное отличие от обычного цикла проверки - поток не крутится впустую и не жрёт CPU.
Это не полная замена
condition_variable.Для сложных predicates, очередей и нескольких условий
condition_variable всё ещё нужен.Но для простого флага, состояния или lightweight-синхронизации
std::atomic::wait часто даёт более чистый и быстрый код.C++20 тихо добавил одну из самых полезных низкоуровневых фич для concurrent programming.
