#include <iostream> #include <thread> #include <mutex> #include <condition_variable> #include <chrono> std::mutex mtx; std::condition_variable cv; bool ready = false; void print_id(int id) { std::unique_lock<std::mutex> lck(mtx); while (!ready) { cv.wait(lck); } // スレッドが再開された後の処理 std::cout << "Thread " << id << '\n'; } void go() { std::unique_lock<std::mutex> lck(mtx); ready = true; cv.notify_all(); // 全てのスレッドに通知 } int main() { std::thread threads[10]; // スレッドの起動 for (int i = 0; i < 10; ++i) { threads[i] = std::thread(print_id, i); } std::this_thread::sleep_for(std::chrono::milliseconds(100)); // 全スレッドの再開 go(); // 全スレッドの終了を待機 for (auto& th : threads) { th.join(); } return 0; }