将数据从线程存储到全局容器的最佳方法?

时间:2018-10-20 12:13:09

标签: c++ multithreading

我有一个用于存储一些结果的容器。说,

std::vector<double> allResults

,我有一堆线程正在努力获得这些结果,并将其存储在容器中。每个线程的任务是获得多个但互不相同的结果。

避免虚假共享的最佳方法是什么?

可以简单地让一个线程对一个结果执行其工作,然后说

allResults[index] = //insert thread's result

因为每个线程都在索引上工作,而没有其他线程可以共享?

或者我应该做些不同的事情,例如为每个线程创建一个单独的向量:

std::vector<double> vectorForEachThread

然后每个线程将其结果添加到该向量,然后在完成所有操作后,以某种方式组合这些向量?

1 个答案:

答案 0 :(得分:0)

如果结果属于某些线程间任务,则每个任务应通过消息系统将其自身的结果返回给请求者线程,比如说回调。

如果结果显示某种状态,则该参数应该只能从一个对象(或线程)写入,并且可以被许多对象读取。这些样式将使您免于无休止的竞争条件调试会话。

如果您的结构不能接受这种样式,则可以考虑进行重构。

最后,请避免从全局变量执行此类任务。使它们成为线程间消息。