【发布时间】:2022-01-05 01:11:35
【问题描述】:
我尝试实现一个功能:主线程创建多个子线程并阻塞主线程,当任何一个子线程结束时唤醒主线程继续执行。
以下代码是我在C++11中使用std::future的尝试:
std::pair<size_t, size_t> fun(size_t i, size_t j)
{
std::this_thread::sleep_for(std::chrono::seconds(i * j));
return { i, j };
}
int main()
{
std::shared_future<std::pair<size_t, size_t>> ret;
std::pair<size_t, size_t> temp;
ret = std::async(std::launch::async, fun, 10, 9);
ret = std::async(std::launch::async, fun, 5, 4);
ret = std::async(std::launch::async, fun, 2, 1);
temp = ret.get();
std::cout << temp.first << "\t" << temp.second << "\n";
return 0;
}
对于结果,我希望程序在(2 * 1)秒后直接输出“2 1”并结束主线程,但在我的尝试中,程序需要等待第一个子线程休眠(10 * 9) 秒前输出“2 1”并结束主线程。
【问题讨论】:
-
您可以在问题中添加minimal reproducible example 内联吗?不是图片,复制起来很不方便!另外,作为新用户,请使用tour 并阅读How to Ask。关于您的问题,您不应该陷入一种误解:线程没有父/子关系。您在此处使用了稍微模棱两可的措辞。
-
你如何描述它,你需要一个主线程睡眠的条件变量,子线程应该在退出之前发出信号。
标签: c++ multithreading c++11