最近想用NDK实现一个多线程版的智能指针自己用,结果发现在NDK应用层无法使用内核类的原子操作函数~也无法去指定对应的CPU去调用Linux原子操作函数,毕竟手机的cpu千奇百怪。。。
最后查了半天文档发现原来在sys/atomics.h中,简单定义了一些原子操作,文档见 ANDROID ATOMICS OPERATIONS
1. 自加操作
__ATOMIC_INLINE__ int
__atomic_inc(volatile int *ptr)
{
return __sync_fetch_and_add (ptr, 1);
}
将ptr指向的值加一,返回原来的值,我的时NDKR9 他自己调用了linux的原子函数。。。
2. 自减操作
__ATOMIC_INLINE__ int
__atomic_dec(volatile int *ptr)
{
return __sync_fetch_and_sub (ptr, 1);
}
同上相当于i-- ,再次吐槽他自己调linux函数。。。
3. 赋值
__ATOMIC_INLINE__ int
__atomic_swap(int _new, volatile int *ptr)
{
int prev;
do {
prev = *ptr;
} while (__sync_val_compare_and_swap(ptr, prev, _new) != prev);
return prev;
}
将 _new 的值赋给指向的地址,do{}while是为了防止当赋值操作