我用boost编写了一个c ++程序。 我的程序就像:
int main(int argc, char ** argv)
{
boost::thread workerThread(worker)
// Waiting end of calculation...
workerThread.join();
return 0;
}
void worker()
{
// Ultra intensive calculation here. Big loop on big vectors, ...
}
在一些“小”的计算中,没关系,程序返回了良好的结果。 但是如果我增加输入,程序就会开始冻结计算机。 (虽然他回报了好的结果)。 我认为使用多线程可以解决这个问题,但显然不是..
你怎么看?是否有可能减少工作线程使用的内存,以允许用户继续使用他的计算机? 我试图在我的计算代码中找到一些错误,但现在还没找到。答案 0 :(得分:2)
join()
将阻止,直到线程中的工作完成,如果您显示的代码正确描述了您的场景,则程序无法在此之前自然返回。
你并没有真正做任何事情 - 你只是启动一个额外的线程来完成整个事情,然后你等待线程完成。
正如我在评论中提到的那样,通过大量使用CPU来降低系统速度的可能性极小。我认为你只是吞噬了太多的内存而且操作系统忙于分页 - 但除非你详细说明,否则我无法再帮助了。