gpt4 book ai didi

c++ - 如果互斥体和数据项在内存中靠近在一起,那么缺点在哪里?

转载 作者:行者123 更新时间:2023-12-01 14:37:16 25 4
gpt4 key购买 nike

在《C++并发实战》第265页中,

enter image description here

具有互斥锁的同一缓存行中的数据将被传播,因为互斥锁是作为 r-m-w 原子操作实现的。那么这种情况的缺点就是“调用操作系统内核”的成本?

最佳答案

这是一个非常低级的计算机体系结构问题,因此如果您没有得到什么,请提问。知道了这一点,我们就进入正题吧。

首先,处理器 L1 高速缓存中的数据被组织在所谓的高速缓存行中。它们的长度通常约为 64 字节。请注意,单个缓存行对于缓存来说是不可分割的 - 我的意思是它作为一个整体被“标记”为有效或无效。

其次,现代处理器具有多个核心,L1 缓存是每核心缓存。因此,他们需要一种以某种方式同步其内容的方法。可能的方法之一是 MESI 协议(protocol)及其“子协议(protocol)”。我建议您阅读它,因为它可以帮助您更好地理解我的答案。但回到正题 - 如果其他核心修改引用相同内存地址的缓存行,MESI 协议(protocol)可能会使一个核心(甚至多个核心)中的缓存行无效。到目前为止一切顺利吧?

因此,了解这些事实后,答案现在就变得非常明显了。如果某些不共享的数据(示例中的互斥体)位于内存中某些共享数据附近,则它可能会进入同一缓存行。使用此非共享内存块可能会导致不必要的和不希望的性能损失

关于c++ - 如果互斥体和数据项在内存中靠近在一起,那么缺点在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62751182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com