在MIPS 32位

时间:2015-06-26 02:37:23

标签: c++ multithreading gcc mips atomic

我正在为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位原子增量的建议?

1 个答案:

答案 0 :(得分:0)

使用__atomic

时遇到了类似的问题
  

对__atomic_fetch_add_8'的未定义引用

我通过链接libatomic来解决它。

BTW,我的mipsel交叉编译器是GCC 4.8.1

另请参阅:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56300