澄清不同操作系统的原子内存访问

时间:2011-01-11 12:52:04

标签: memory compiler-construction operating-system atomic intrinsics

我目前正在将Windows C ++库移植到MacOS作为业余爱好项目作为学习体验。我使用Win Interlocked *函数偶然发现了一些代码,因此我一直在尝试阅读这个主题。

在SO中阅读相关问题,我知道根据操作系统有不同的方法来执行这些操作。 Windows中的联锁*,MacOS中的OSAtomic *我也发现编译器具有内置(内在)操作。

在阅读gcc builtin atomic memory access后,我想知道内在与OSAtomic *或Interlocked *之间有什么区别?我的意思是,我不能在OSAtomic *或gcc之间做出选择如果我在MacOS上使用gcc时内置?如果我使用gcc在Windows上也一样。

我还读到,在Windows Interlocked *上既有内联版本,也有内在版本。 在内在或内联之间进行选择时需要考虑什么?

一般来说,操作系统上有多个选项可以使用什么?或者这又是“它依赖”吗?如果是这样,它依赖什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

真正的问题是这个。

我们都知道并喜爱的英特尔芯片组没有明确的内存写入顺序。

英特尔®64架构内存订购白皮书。本文档试图仔细定义内存写入顺序。

[本文档已合并到Intel 64和IA-32架构软件开发人员手册的第3A卷中。]

英特尔®64和IA-32架构软件开发人员手册卷3A:系统编程指南第1部分这是该文档的修订版。

http://www.intel.com/products/processor/manuals/

由于芯片本身并不保证特定的内存写入顺序,因此需要保留一致性。

“它取决于”是“它取决于您正在构建软件的操作系统中的API。”

更多阅读:http://en.wikipedia.org/wiki/Memory_ordering

http://rsim.cs.illinois.edu/Pubs/10-cacm-memory-models.pdf