2013-11-28 133 views
-1

我使用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代码中的一些错误,但现在没有找到。

+0

添加线程不会解冻计算机。不知道你为什么这么想。如果你详细说明,我会解释为什么不是这样。 – usr

+0

为什么你期望你的程序*不使用它可以得到的CPU时间?你有没有编写任何说“好吧,我最好什么都不做”的代码?如果没有,那么你的程序将在所有的CPU时间内工作。 – jalf

+1

如果您的工作人员使用循环/重复操作,请每次都添加临时性指令(sleep(5ms))以便执行 - 这可能是因为您的编译器没有针对上下文切换优化密集计算如深度递归调用)。这意味着在工作人员运行和系统冻结时没有上下文切换。 – utnapistim

回答

2

join()将阻塞,直到线程中的工作完成,如果您正确显示的代码描述了您的方案,那么在此之前程序不能自然返回。

你并没有真正做任何事情 - 你只需启动一个额外的线程来完成整个事情,然后等待线程完成。

正如我在评论中提到的那样,通过使用您的CPU非常不可能减慢系统速度。我认为你只是吞噬了太多的内存,而操作系统正在忙于分页 - 但除非你详细说明,否则我无法进一步提供帮助。

+0

哦,是的,这是真的。事实上,我将在稍后并行处理我的代码。我只想在程序运行时不冻结我的电脑。你知道一个办法吗?也许一种方法来限制CPU使用率? – user3046300

+1

我不知道你在做什么,操作系统应该公平地分配时间片,也许你正在咀嚼内存,最终会发生分页颠簸而不是真的让CPU忙碌。 – ScarletAmaranth