我有一堆线程正在努力获取结果并将其存储在共享向量中。
现在我正在以以下方式执行此操作,但我想知道是否有更快的执行方式(速度是此处的唯一优先事项,因此请重点关注)。以避免虚假共享等。
全球范围内存在一个向量
std::vector<double> allResults;
,每个线程通过写入将其结果存储在此向量中
std::for_each(allResults.begin() + i, allResults.begin() + i + n,
[](double& res)
{
res = .... //Calculate result and store it.
});
在这里,对于每个线程,i, n
是与当前线程应该计算的结果范围相对应的指标:allResults[i], ...., allResults[i + n - 1]
。这些范围对于每个线程都是唯一。因此,每个线程都在各自的结果范围内工作,没有重叠。