当前位置:  开发笔记 > 编程语言 > 正文

在Linux上互锁的等价物

如何解决《在Linux上互锁的等价物》经验,为你挑选了3个好方法。

在C++ Linux应用程序中,获取Win32上的Interlocked函数提供的功能的最简单方法是什么?具体来说,一种轻量级的方式来原子递增或添加32位或64位整数?



1> cero..:

英特尔的开源ThreadBuildingBlocks有一个模板Atomic,它提供与.NET的Interlocked类相同的功能.

与gcc的Atomic内置函数不同,它是跨平台的,不依赖于特定的编译器.正如Nemanja Trifunovic正确指出的那样,它确实依赖于x86和Itanium芯片提供的比较和交换 CPU指令.我猜你不会期待英特尔图书馆的任何其他内容:)



2> Nicola Bonel..:

只有几点说明澄清与Linux无关的问题.

RWM(读 - 修改 - 写)操作和那些不一步执行的操作需要硬件支持才能以原子方式执行; 其中有增量和减量,fetch_and_add等.

对于某些体系结构(包括I386,AMD_64和IA64),gcc具有对原子内存访问的内置支持,因此不需要外部库.在这里,您可以阅读有关API的一些信息.



3> Nemanja Trif..:

严格来说,Linux不能像Win32中那样提供原子"互锁"功能,只是因为这些功能需要硬件支持,Linux运行在一些不提供支持的平台上.话虽如此,如果您可以将自己约束到Intel x86/x64,请查看Boost共享指针库中引用计数的实现.

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有