从windows角度来说,condition_variable类似event。
阻塞等待出发,不过condition_variable可以批量出发。
代码如下:
// 1111111.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <thread> #include <mutex> #include <condition_variable> std::mutex gmtx; std::condition_variable gcv; bool gready = false; void do_print_id(int id) { std::unique_lock<std::mutex> lock(gmtx); while (!gready) gcv.wait(lock); std::cout << "thread " << id << std::endl; } void go() { std::unique_lock<std::mutex> lock(gmtx); gready = true; gcv.notify_all(); } int _tmain(int argc, _TCHAR* argv[]) { std::thread thread[50]; for (int i = 0; i < 50; ++i) thread[i] = std::thread(do_print_id, i); std::cout << "start..." << std::endl; //触发激活 go(); //等待线程结束执行 for (auto & th : thread) th.join(); return 0; }
显示如下:
start...
thread 7
thread 3
thread 2
thread 9
thread 6
thread 5
thread 1
thread 0
thread 4
thread 8
请按任意键继续. . .
时间: 2024-10-12 01:37:14