-
5 votesanswersviews
锁定指令是否在弱有序访问之间提供了障碍?
在x86上, lock 等前缀指令(如 lock cmpxchg )除了原子操作外还提供屏障语义:对于回写内存区域的正常内存访问,读取和写入不按 lock -前缀指令重新排序,按照8.2.2节英特尔SDM第3卷: 读取或写入不能使用I / O指令,锁定指令或序列化指令进行重新排序 . 本节仅适用于回写内存类型 . 在同一个列表中,您会发现一个例外情况,它指出没有订购弱排序的商店: 读取不会与... -
23 votesanswersviews
C 0x内存模型和推测性加载/存储
所以我正在阅读有关即将推出的C 0x标准的内存模型 . 但是,我对允许编译器做什么的一些限制有点困惑,特别是关于推测性加载和存储的限制 . 首先,一些相关的东西: Hans Boehm's pages about threads and the memory model in C++0x Boehm, "Threads Cannot be Implemented as a Library... -
54 votesanswersviews
`std :: kill_dependency`做了什么,为什么我要使用它?
我 std::kill_dependency 已经发现 std::kill_dependency 功能(§29.3/ 14-15) . 我很难理解为什么我会想要使用它 . 我在N2664 proposal找到了一个例子,但它没有多大帮助 . 它首先显示没有 std::kill_dependency 的代码 . 这里,第一行在第二行中携带依赖关系,它将依赖关系带入索引操作,然后将依赖关系携带到 do... -
5 votesanswersviews
char数组上的C内存模型和竞争条件
基本上我无法理解这一点:(来自Bjarne FAQ) 但是,大多数现代处理器不能读取或写入单个字符,它必须读取或写入整个字,因此对c的赋值实际上是“读取包含c的单词,替换c部分,然后再将单词写回 . ''因为对b的赋值是相似的,所以即使线程没有(根据它们的源文本)共享数据,两个线程也有很多机会相互冲突! 那么char数组如何在元素之间没有3(7?)字节填充的情况下存在? -
27 votesanswersviews
empty synchronized(this){}对线程之间的内存可见性有什么意义吗?
我在StackOverflow的评论中读到了这个: 但是如果你想要安全,你可以在@PostConstruct [方法]的末尾添加简单的synchronized(this){} [注意变量不易变化] 我想只有在 synchronized 块中执行write和read或者至少read是volatile时才强制 happens-before . 引用的句子是否正确?空 synchronized(t... -
39 votesanswersviews
Java内存模型和C 11内存模型有什么相似之处?
新的c标准引入了内存模型的概念 . 关于它的问题已经有了问题,它是什么意思,它如何改变我们用c编写代码的方式等等 . 我有兴趣了解C内存模型与旧的,众所周知的Java内存模型(1.5)的关系 . 它是一样的吗?它是相似的吗?他们有什么重大差异吗?如果是这样,为什么? java内存模型已经存在了很长时间,并且很多人都知道它相当不错,所以我想通过将它与java的内存模型进行比较,学习C内存模型不仅对我... -
12 votesanswersviews
C内存模型 - 此示例是否包含数据竞争?
我正在阅读Bjarne Stroustrup 's C++11 FAQ and I' m,无法理解memory model部分中的示例 . 他提供了以下代码段: // start with x==0 and y==0 if (x) y = 1; // thread 1 if (y) x = 1; // thread 2 FAQ说这里没有数据竞争 . 我不明白 . 内存位置 x 由线程1读取并由线... -
22 votesanswersviews
现代x86硬件可以不将单个字节存储到内存中吗?
说到C的并发内存模型,Stroustrup的C编程语言,第4版,第1节 . 41.2.1,说: ...(像大多数现代硬件一样)机器无法加载或存储任何小于单词的东西 . 但是,我的x86处理器,几年前,可以存储小于一个字的对象 . 例如: #include <iostream> int main() { char a = 5; char b = 25; a... -
1632 votesanswersviews
C 11引入了标准化的内存模型 . 这是什么意思?它将如何影响C编程?
C 11引入了标准化的内存模型,但究竟是什么意思呢?它将如何影响C编程? This article(由引用 Herb Sutter 的 Gavin Clarke )说, 内存模型意味着C代码现在有一个标准化的库可以调用,无论是谁编译器以及它运行的是什么平台 . 有一种标准方法可以控制不同线程与处理器内存的对话方式 . “当你谈论在标准中的不同内核之间分割[代码]时,我们讨论的是内存模型 . 我...