【发布时间】:2013-11-23 01:50:32
【问题描述】:
基本上我很难理解这一点:(来自 Bjarne 常见问题解答)
但是,大多数现代处理器无法读取或写入单个 字符,它必须读或写一个完整的单词,所以赋值给 c 真的是``读取包含c的单词,替换c部分,然后写 再次返回这个词。'' 由于对 b 的赋值是相似的,所以有 两个线程甚至有很多机会相互破坏 尽管线程不(根据其源文本)共享数据!
那么如果元素之间没有 3(7?) 个字节填充,char 数组如何存在呢?
【问题讨论】:
-
关于本段的另一个问题,关于它对“现代硬件”的主张:Can modern x86 hardware not store a single byte to memory?。 (TL:DR:无论硬件在内部做什么,所有具有字节存储指令的 ISA 都不会对周围字节产生任何架构上可见的影响,因此不存在软件正确性问题。早期的 Alpha AXP 是唯一没有字节加载/存储指令,这是 C++11 内存模型的问题。)
标签: c++ c++11 race-condition memory-model