База Hintsage

Многопоточность

Потоки, синхронизация, атомики и модель памяти C++.

Практика

Вопросы: Многопоточность

Ситуация: несколько потоков получают доступ к лениво инициализируемому объекту. Безопасно ли читать value после успешного std::call_once, не делая его атомарным?

#include <mutex>
#include <thread>

std::once_flag flag;
int value;

void init() {
    value = 42;
}

int read() {
    std::call_once(flag, init);
    return value;
}

В следующем фрагменте уведомление выполняется до запуска ожидающего потока. Объясните, почему ожидание не теряется и при каком условии wait возвращается.

#include <atomic>
#include <thread>

std::atomic<bool> ready{false};

void worker() {
    ready.wait(false);
}

int main() {
    ready.store(true, std::memory_order_release);
    ready.notify_one();
    std::thread t(worker);
    t.join();
}
Программирование C++МногопоточностьРазработчик системного C++

Показано 2140 из 50