【问题标题】:Sequentially consistent memory and atomic registers顺序一致的内存和原子寄存器
【发布时间】:2016-04-28 01:00:48
【问题描述】:

顺序一致性(对于无数据竞争的程序,SC-DRF)是现代编程语言(例如 Java 或 C++11)提供的最强大的共享内存一致性模型。

在“多处理器编程的艺术”中,作者(M. Herlihy 和 N. Shavit)在本书的大部分定理中都使用了原子寄存器的概念。

说 Java 中的 volatile 引用和 C++ 中带有 std::memory_order seq_cst 的原子是(无法区分的)原子寄存器是否正确?如果 C++ 的内存模型保证标记为 std::atomic 的内存位置的整个空间的顺序一致性,是否可以观察到 C++ 中线性化寄存器和原子之间的差异?

【问题讨论】:

标签: java c++11 concurrency theory


【解决方案1】:

对于 C/C++ 案例,使用 memory_order_seq_cst 读取或修改的原子应该会给您所需的一切(原子 RMW 操作,并保证线性化。)

对于 java,volatile 为您提供了读写的线性化能力,但任何严重的并发代码也可能需要 RMW(即比较和交换),因此请查看 java Atomic 包以获取也进行比较和交换的类型(我认为不使用这些包或使用同步关键字是不可能实现自己比较和交换的)http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/package-summary.html

【讨论】:

    猜你喜欢
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 2021-11-02
    相关资源
    最近更新 更多