c - 64 位 native 类型原子性和内存总线?

标签 c cpu cpu-architecture atomic

我曾读到过,只要原生类型不比内存总线宽且对齐,它们就是原子的。我在这方面可能是非常错误的,但即使对于 32 位 CPU ( http://en.wikipedia.org/wiki/Front-side_bus ),内存总线通常不是 64 位的吗?在哪种情况下,上面的语句意味着读取或写入或对齐的 64 位 native 类型将是原子的,对吧?我查看了英特尔的文档,它说 x86 保证对 32 位及以下的原子是原子的 - 但我想确保我正确理解内存总线宽度部分。

谢谢!

最佳答案

内存总线的宽度与内存访问的原子性无关。您可以拥有一位内存总线,并且通过 64 次读取或写入保持总线仍然具有原子 64 位内存访问。如果 CPU 和高速缓存之间的路径是 32 位并且无法锁定高速缓存,则您可能拥有 64 位总线但不是原子 64 位内存访问。

关于c - 64 位 native 类型原子性和内存总线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18388221/

相关文章:

创建将单词添加到字典中的函数

c - 通过地址访问 union 的实际成员

caching - 读取 CPU 缓存内容

使用C计算Linux多核机器上的CPU使用率

cpu - CPU的时钟速度和时钟周期之间的关系

c - 如何使用 C 中的整数对带有字符串的结构进行排序?

c - 将数组作为参数传递给 C 中的函数

memory-management - 确定给定地址的页码和偏移量

x86 - 为什么MESI协议(protocol)不能保证没有LOCK前缀的x86上CMPXCHG的原子性?

debugging - gdb-multiarch (MINGW64) 无法从可执行文件确定架构?