0

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

在 SO 中阅读相关问题,我了解根据操作系统有不同的方法来执行这些操作。Windows 中的 Interlocked*,MacOS 中的 OSAtomic*,我还发现编译器对此具有内置(内在)操作。

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

我还在 Windows Interlocked* 上读到了内联版本和内在版本。在内部或内联之间进行选择时要考虑什么?

一般来说,操作系统上有多个选项可以使用什么?还是这又是“取决于”?如果是这样,它取决于什么?

谢谢!

4

1 回答 1

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

于 2011-01-11T12:57:57.343 回答