我使用boost编写了一个C++程序。 我的计划是这样的:在多线程C++程序密集计算期间冻结(boost)
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, ...
}
在一些“小”微性,它的确定,程序返回了良好的效果。 但是,如果我增加输入,程序开始冻结计算机。 (虽然他返回了好的结果)。 我以为使用多线程可以解决这个问题,但显然不是..
你觉得呢?是否有可能减少工作线程使用的内存,以允许用户继续使用他的计算机? 我试图找到我的calcul代码中的一些错误,但现在没有找到。
添加线程不会解冻计算机。不知道你为什么这么想。如果你详细说明,我会解释为什么不是这样。 – usr
为什么你期望你的程序*不使用它可以得到的CPU时间?你有没有编写任何说“好吧,我最好什么都不做”的代码?如果没有,那么你的程序将在所有的CPU时间内工作。 – jalf
如果您的工作人员使用循环/重复操作,请每次都添加临时性指令(sleep(5ms))以便执行 - 这可能是因为您的编译器没有针对上下文切换优化密集计算如深度递归调用)。这意味着在工作人员运行和系统冻结时没有上下文切换。 – utnapistim