网上有一些关于如何编写64位原子代码的资料,例如:
How to guarantee 64-bit writes are atomic?
..但在我走这条路之前,我更愿意使用Android NDK / ARM特定解决方案(如果有的话)。
我正在移植需要32位和64位原子操作的C ++引擎。我研究并实现了GCC内置的__sync_ *函数,但是到了链接的时候,我得到了64位操作的这些错误:
error: undefined reference to '__sync_fetch_and_or_8'
error: undefined reference to '__sync_lock_test_and_set_8'
error: undefined reference to '__sync_fetch_and_and_8'
error: undefined reference to '__sync_fetch_and_add_8'
error: undefined reference to '__sync_val_compare_and_swap_8'
我的目标是armeabi-v7a,我读过它有64位原子(ldrexd / strexd)的汇编指令,那么有没有办法通过GCC内置原子来访问它们?如果没有,还有其他选择吗?
谢谢!
答案 0 :(得分:4)
自从我的问题以来,发布了NDK r8d,它支持内置的64位原子。
http://developer.android.com/tools/sdk/ndk/index.html
将ARM的64位内置原子函数反向移植到GCC 4.6。