← index
cplusplus2x.Examples/C++20/latch/latch-ex.cpp
Source: cplusplus2x.Examples/C++20/latch/latch-ex.cpp
#include <iostream>
#include <latch>
#include <syncstream>
#include <thread>
#include <vector>

std::latch work_start_signal(3);

void worker(int id) {
    std::osyncstream(std::cout) << "[Worker " << id << "] Loading assets...\n";
    std::this_thread::sleep_for(std::chrono::milliseconds(id * 100));
    std::osyncstream(std::cout) << "[Worker " << id << "] Ready!\n";
    work_start_signal.count_down();
}

int main() {
    std::vector<std::thread> threads;
    for (int i = 0; i < 3; ++i)
        threads.emplace_back(worker, i + 1);
    std::cout << "[Main] Waiting for workers to be ready...\n";
    work_start_signal.wait();
    std::cout << "[Main] All workers ready! Starting game loop.\n";
    for (auto &t : threads)
        t.join();
    return 0;
}