如何检查线程是否已在 C++11 及更高版本中完成工作?我一直在阅读文档,并编写了以下代码:
#include <iostream>
#include <thread>
void mythread()
{
//do some stuff
}
int main()
{
std::thread foo(mythread);
if (foo.joinable())
{
foo.join();
//do some next stuff
}
}
joinable
只告诉线程已经开始工作,但我想知道如何编写代码来检查线程是否完成工作。
例如:
#include <iostream>
#include <thread>
void mythread()
{
//do some stuff
}
int main()
{
std::thread foo(mythread);
if (foo.finishedWork())
{
foo.join();
//do some next stuff
}
}
原文由 user2856064 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可能想要使用
std::future
,它提供了更高级别的工具,您可以在其中轻松检查异步计算是否完成(也就是准备好):示例:另一方面,您可能认为简单地使用“安全”(或原子)标志是可行的:
但是,它 不起作用。虽然您认为
is_done = true
是您在mythread()
中所做的最后一件事;您可能已经在该范围内创建了一些具有 自动存储持续时间 的对象,并且由于这些对象以相反的构造顺序被销毁,因此在设置is_done
之后,该线程中仍然会有“一些工作”。