在Linux上互锁的等价物
-
02-07-2019 - |
其他提示
英特尔的开源 ThreadBuildingBlocks 有一个模板,Atomic,提供与.NET的Interlocked类相同的功能
与gcc的Atomic内置插件不同,它是跨平台的,不依赖于特定的编译器。正如Nemanja Trifunovic正确指出的那样,它确实取决于所提供的比较和交换 CPU指令通过x86和Itanium芯片。我想你不会期待英特尔图书馆的任何其他内容:)
只是为了澄清与 Linux 无关的问题。
RWM (读取 - 修改 - 写入)操作以及不执行单步操作的操作需要硬件支持才能执行 atomically ;其中有增量和减量,fetch_and_add等。
对于某些体系结构(包括I386,AMD_64和IA64),gcc内置了对原子内存访问的支持,因此不需要外部库。 此处您可以阅读有关API的一些信息
严格来说,Linux无法提供原子级“互锁”功能。功能与Win32中的功能类似,只是因为这些功能需要硬件支持,Linux运行在一些不提供支持的平台上。话虽如此,如果您可以将自己约束到Intel x86 / x64,请查看Boost共享指针库中引用计数的实现。
Apache Portable Runtime中的原子功能非常接近到Win32 InterlockedXXX函数。
在GTK和QT编程中使用的相当常见的glib库以及独立的glib库提供了各种原子操作。请参阅 http://library.gnome.org/devel/glib /2.16/glib-Atomic-Operations.html 获取列表。 Interlocked支持的大多数操作都有 g_atomic
函数,在硬件直接支持这些操作的平台上,它们被内联为所需的汇编代码。
不隶属于 StackOverflow