并行写入数组

时间:2016-01-24 09:44:03

标签: c++ multithreading c++11

我有大量的数据需要从不同的线程中读取/写入随机位置。有一个mutex显然会杀死性能。我的想法是让每个mutexes负责数组中的特定范围。这样写之前我可以根据我要编写的数组中的索引来锁定正确的mutex。理论上它可以减少种族。但我想知道 - 也许有更好的方法?

1 个答案:

答案 0 :(得分:4)

这听起来像是一种合理的方式。

但有很多事情需要考虑:

  1. 您声明您的想法是拥有许多互斥锁,每个互斥锁都负责数组中的特定范围"。您应该考虑访问模式来决定如何将条目分配给互斥锁。如果线程倾向于处理附近的条目,则可以考虑使用不同的方案将条目分配给互斥锁,例如,条目索引以互斥锁的数量为模。

  2. 根据经验,请注意互斥锁的数量应由线程数决定,而不是范围的大小。我在this question中写了更多内容(在撰写本文时,这是接受的答案)。

  3. 再次根据使用模式,您应该考虑使用读/写锁来避免对同一条目上的多个读取器进行不必要的序列化。 YMMV。