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

标签 c++ multithreading performance caching concurrency

如果一个数据结构被多个线程读取(问:也写?),如果线程正在访问不同的缓存行,则不会出现“线程抖动”。

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

在这种数据结构中,您如何强制不同线程访问的数据位于不同的缓存行?

一个想法是将每个数据结构项“填充”到至少缓存行的长度,但这肯定会浪费缓存空间吗?

如果可以证明上述方法始终有效,那么这种技术是否是一种“无锁”甚至可能是“无等待”数据结构?

最佳答案

一个集合的节点在内存中随机分布,因此不太可能共享缓存行。但是,由于您在写入之前将整个集合锁定在内存中,因此无论如何都没有抖动的风险。

关于c++ - 编写数据结构以对每个线程使用不同的缓存行以避免线程抖动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23281847/

相关文章:

c++ - OpenSSL:RSA 加密/解密、 key 生成和 key 持久性

java - Thread.sleep(x) 是否足够准确以用作 Android 中的时钟?

android - SciChart 图不连续

multithreading - JavaFX 中的线程 : Not on FX application thread

performance - Mathematica 的模式匹配优化不佳?

java - 给予改变的独特方式——不输出期望值

c++ - SDL_Surface::pixels 改变它的值

必要时插入类型名的 C++ 宏

c++ - 只读变量不可赋值

android - SupportMapFragment vs MapFragment 性能方面