MIPS 32位上缺少__sync_fetch_and_add_8的备选方案
Alternative for missing __sync_fetch_and_add_8 on MIPS 32-bit
我正在为int64_t类型编写一个原子增量函数,该函数适用于许多不同的OS/CPU组合。例如,在Windows上,我可以使用InterlockedIncrement64,在OS X上,我可使用OSAtomicIncrement64Barrier,在Linux变体上,我可用GCC内置__sync_fetch_and_add。
然而,当使用GCC对MIPS 32位体系结构进行交叉编译时,我遇到了一个链接错误,即缺少对__sync_fetch_and_add_8的引用。一些快速的谷歌搜索显示MIPS 32位体系结构不支持64位原子增量指令(https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56300)。错误报告中关于链接libatomic的建议似乎不起作用,这可能是因为我仍在使用GCC 4.7。
我知道我总是可以使用pthread互斥来保护增量逻辑,但这比使用本机指令要慢得多。
对于MIPS 32位体系结构,如何以任何其他方式实现64位原子增量,您有什么建议吗?
我在使用__atomic 时遇到了类似的问题
对`__atomic_fetch_add_8'的未定义引用
我通过链接libatomic解决了这个问题。
顺便说一句,我的mipsel交叉编译器是GCC 4.8.1
另请参阅:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56300
相关文章:
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- 计算每个节点的树高,帮助我解释这个代码解决方案
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- visual c++,如何获取解决方案目录中的代码
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- C++11 中不同类型的对象的 std::array 的替代方案
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- Visual Studio - Cmake Project - Add NetCDF
- 别名模板的专业化 C++11 中没有开销的最佳替代方案
- 我的固定时间步长与增量时间和插值的解决方案是错误的吗?
- 无法在问题解决方案中执行输出逻辑
- 最大的回文产品 - 程序未运行,编写解决方案但无法理解问题
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- 在一个解决方案中针对第三方静态库 (Creo) 的不同版本(版本)进行构建
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- N-queen问题:无法弄清楚为什么我的解决方案不起作用