编写数据结构以使用每个线程不同的缓存行来避免线程抖动?

时间:2014-04-24 23:50:10

标签: c++ multithreading performance caching concurrency

如果多个线程读取了数据结构(Q:也写?),那么就不会有线程抖动"如果线程正在访问不同的缓存行。

在这方面有经验的人是否能够分享一些代码/建议如何确保/确定缓存行开始/结束的位置?在像矢量数组之类的东西上,这相对容易,但对于std::unordered_mapstd::set呢?

您如何将不同线程访问的数据强制执行此类数据结构中的不同缓存行?

一个想法就是" pad-out"每个数据结构项至少是缓存行的长度,但这肯定会浪费缓存空间吗?

如果可以证明上述内容始终有效,那么这种技术将成为一种无锁定的技术。甚至可能"等待"数据结构?

1 个答案:

答案 0 :(得分:0)

集合中的节点在内存中相当随机分布,因此不太可能共享缓存行。但是因为你在写入之前将整个集合锁定在内存中,所以无论如何都有很小的颠簸风险。