多任务处理在我的程序中不起作用 C++11



如何在不暂停主函数的情况下并行启动新线程?

这是我的代码:

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)结束时,程序将停止,即永远不会。

最新更新