多语言展示
当前在线:1854今日阅读:91今日分享:37

ndk中atomic的使用

下面就是小编带给大家的ndk中atomic的使用方法操作,希望能够给你们带来一定的帮助,谢谢大家的观看。
方法/步骤
1

最近想用NDK实现一个多线程版的智能指针自己用,结果发现在NDK应用层无法使用内核类的原子操作函数~也无法去指定对应的CPU去调用Linux原子操作函数,毕竟手机的cpu千奇百怪。

2

最后查了半天文档发现原来在sys/atomics.h中,简单定义了一些原子操作,文档见 ANDROID ATOMICS OPERATIONS

3

自加操作:__ATOMIC_INLINE__ int__atomic_inc(volatile int *ptr){  return __sync_fetch_and_add (ptr, 1);}将ptr指向的值加一,返回原来的值,我的时NDKR9 他自己调用了linux的原子函数。

4

将 _new 的值赋给指向的地址,do{}while是为了防止当赋值操作结束后ptr指向的值再次变化,实际上调用的Linux上的比较赋值。

5

__sync_val_compare_and_swap 函数的意思是, 当 *ptr == old 时 *ptr = _new 函数的返回值一定是ptr的原值,所以__atomic_cmpxchg函数的返回值为 当 *ptr == old 时 返回0 否则返回 1 。

6

默认是使用最小额度的C++运行时库, 在Application.mk中添加APP_STL指明所需要的库,需要注意的是,目标手机或者模拟器上可能没有下面的共享库,此时就需要你作为静态库使用。

注意事项
1

以上就是小编带给大家的如何操作的关键所在,如果觉得本经验对你们有帮助,请给小编我进行一点小小的支持。大家也可以下面发表一下自己的看法。

2

个人意见,仅供参考。

推荐信息