如何在不暂停主函数的情况下并行启动新线程?
这是我的代码:
void someFunction { while(1);}
int main(){
thead *th = new thead(&someFunction);
thead.join();
return 0;
}
但程序并没有停止
p.S.如何在并行源中运行线程
在C++11中,允许实现假设这种循环终止。因此,您的代码可以被优化为什么都不做。否则,大量合法且有价值的优化是不可能的,但效果有时会令人惊讶。
程序无法停止,因为主线程调用thread.join()
,这意味着它将等待线程"thread"完成,但调用的函数在循环到无穷大时永远不会完成。
您的thread.join();
正在等待辅助线程退出,但由于辅助线程正在执行无限循环,因此永远不会退出。
编辑:我应该补充一点,标准为允许线程退出提供了足够的余地,但这不是必需的。
此调用:
thread.join();
明确地告诉您的程序等待,直到thread
正在执行的函数返回。你的函数永远不会返回,所以你的程序永远不会通过这个函数调用。您可以在线程创建和对join()
的相应调用之间启动额外的线程。例如:
#include <thread>
void someFunction() { for(volatile int x = 0; ; x = x){};}
int main()
{
std::thread t1(someFunction);
std::thread t2(someFunction);
std::thread t3(someFunction);
t1.join();
t2.join();
t3.join();
return 0;
}
将生成3个完全不做任何事情的线程。如果传递给线程的函数确实返回,这就是您想要做的
如果你想在这之前运行任务并退出主程序,你需要以依赖于平台的方式生成一个新进程,这样它们的执行就不会因程序退出而停止。
您加入了while(1)循环。当while(1)结束时,程序将停止,即永远不会。