在C++ Linux应用程序中,获取Win32上的Interlocked函数提供的功能的最简单方法是什么?具体来说,一种轻量级的方式来原子递增或添加32位或64位整数?
英特尔的开源ThreadBuildingBlocks有一个模板Atomic,它提供与.NET的Interlocked类相同的功能.
与gcc的Atomic内置函数不同,它是跨平台的,不依赖于特定的编译器.正如Nemanja Trifunovic正确指出的那样,它确实依赖于x86和Itanium芯片提供的比较和交换 CPU指令.我猜你不会期待英特尔图书馆的任何其他内容:)
只有几点说明澄清与Linux无关的问题.
RWM(读 - 修改 - 写)操作和那些不一步执行的操作需要硬件支持才能以原子方式执行; 其中有增量和减量,fetch_and_add等.
对于某些体系结构(包括I386,AMD_64和IA64),gcc具有对原子内存访问的内置支持,因此不需要外部库.在这里,您可以阅读有关API的一些信息.
严格来说,Linux不能像Win32中那样提供原子"互锁"功能,只是因为这些功能需要硬件支持,Linux运行在一些不提供支持的平台上.话虽如此,如果您可以将自己约束到Intel x86/x64,请查看Boost共享指针库中引用计数的实现.