t12*_*3yh 8 c++ multithreading c++11
例如,我有两个线程,t1
和t2
.我想等待t1
或 t2
完成.这可能吗?
如果我有一系列线程,比如说,a std::vector<std::thread>
,我该怎么做?
总是有等待和通知使用std::condition_variable
,例如:
std::mutex m;
std::condition_variable cond;
std::atomic<std::thread::id> val;
auto task = [&] {
std::this_thread::sleep_for(1s); // Some work
val = std::this_thread::get_id();
cond.notify_all();
};
std::thread{task}.detach();
std::thread{task}.detach();
std::thread{task}.detach();
std::unique_lock<std::mutex> lock{m};
cond.wait(lock, [&] { return val != std::thread::id{}; });
std::cout << "Thread " << val << " finished first" << std::endl;
Run Code Online (Sandbox Code Playgroud)
注意: val
不一定代表最先完成的线程,因为所有线程几乎同时完成并且可能会发生覆盖,但这仅用于本示例。