gpt4 book ai didi

c++ - std::thread:如何等待(加入)任何给定线程完成?

转载 作者:可可西里 更新时间:2023-11-01 17:53:21 25 4
gpt4 key购买 nike

例如,我有两个线程,t1t2 .我想等t1 t2完成。这可能吗?

如果我有一系列线程,比如说 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;

注意:val 不一定代表最先完成的线程,因为所有线程大约同时完成并且可能会发生覆盖,但它仅用于此示例。

关于c++ - std::thread:如何等待(加入)任何给定线程完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43614634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com