这可能是一个非常简单的问题,但因为我以前从未使用过线程,所以最好询问而不是完全自己找到最佳解决方案。
我有一个运行次数达数十亿次的巨大for
循环。在每个循环运行中,根据当前的index
,程序会计算出一个数字形式的最终结果。我只想存储最高的result
(或前x个结果)及其对应的索引。
我的问题很简单,如何正确地通过线程运行此循环,以使用所有可用的CPU /核心。
int topResultIndex;
double topResult = 0;
for (i=1; i < 1000000000; ++i) {
double result = // some complicated calculation based on the current index
if (result > topResult) {
topResult = result;
topResultIndex = i;
}
}
每个索引的计算是完全独立的,没有共享资源。尽管如此,每个线程都会访问
topResultIndex
和topResult
。*更新:Giulio和rolfl的解决方案都很好,也非常相似。我只能接受其中一个作为我的答案。