通过编程实现内存障碍

时间:2013-10-16 04:33:15

标签: memory-management memory-barriers

可以通过代码实现内存障碍(不使用CAS或其他锁定原语,如易失性,原子类等)吗? 我相信破坏者能够实现它,而不会实际上对任何锁定原语进行调整 理解这一点的任何指针或参考都会有所帮助 关于其他编程模式(最好是在java中)的建议也值得赞赏。

1 个答案:

答案 0 :(得分:1)

内存屏障的概念与CAS和其他锁定原语正交。例如,如果使用memory_order_relaxed指定,C ++ 11允许CAS操作根本没有任何内存屏障。某些硬件,尤其是x68,总是将内存屏障与原子读 - 修改 - 写操作相关联。

需要内存屏障但没有CAS或锁定的算法的最佳示例是Dekker的协议。 “Location-Based Memory Fences”的第1节给出了协议的一个很好的概述。

请参阅我的博客Volatile: Almost Useless for Multi-Threaded Programming,了解为什么volatile无法用作内存屏障。

C ++特定信息:在C ++ 11中,使用std::atomic_thread_fence。前面的链接有一个很好的例子,没有锁定使用它。如果处理较旧的C ++编译器,则需要采用特定于供应商的例程。一种方法是使用英特尔线程构建模块的tbb :: atomic_fence()。它是我们能找到的任何特定于平台的围栏的包装。