nik*_*ack 5 c++ multithreading c++11
我有大量的数据需要从不同的线程中读取/写入随机位置.有一个mutex显然会杀死性能.我的想法是让mutexes每个人都负责阵列中的特定范围.这样在写之前我可以mutex根据我要编写的数组中的索引来锁定正确的.理论上它可以减少种族.但我想知道 - 也许有更好的方法?
mutex
mutexes
Ami*_*ory 4
这听起来是一个合理的方法。
不过,有很多事情需要考虑:
您声明您的想法是拥有“许多互斥体,每个互斥体负责数组中的特定范围”。您可能应该考虑访问模式来决定如何将条目分配给互斥体。如果线程倾向于处理附近的条目,您可能会考虑使用不同的方案将条目分配给互斥体,例如,条目索引以互斥体的数量为模。
根据经验,请注意互斥体的数量应由线程的数量决定,而不是范围的大小。我在这个问题中写了更多关于这个问题的内容(这是在撰写本文时已接受的答案)。
同样,根据使用模式,您应该考虑使用读/写锁来避免同一条目上的多个读取器进行不必要的序列化。YMMV。
归档时间:
10 年,1 月 前
查看次数:
473 次
最近记录: