C ++中的内存屏障有哪些例子?

时间:2012-07-29 13:47:15

标签: c++ atomic memory-barriers

我看到C ++ 11互斥锁不是void lock() volatile。编译器如何知道哪些函数是内存屏障哪些不是?即使它们没有波动,所有功能都是障碍吗?每个人都应该知道哪些鲜为人知的记忆障碍和记忆障碍?

2 个答案:

答案 0 :(得分:5)

运行时库必须以某种方式实现互斥锁,以便编译器知道!语言标准没有说明如何做到这一点。

可能,它涉及调用一些作为内存屏障的操作系统服务。或者编译器可以有一个扩展名,如void _ReadWriteBarrier();

答案 1 :(得分:5)

std::mutex的实际实现将使编译器不执行非法重新排序,不会忽略变量加载,并且它将确保以原子方式访问锁定变量并且CPU执行锁定获取和释放所必需的内存障碍。

需要做多少工作来确保这一点的细节因平台而异,但您的图书馆实施将做正确的事。