原子变量
来源:互联网 发布:淘宝上哪里买书最便宜 编辑:程序博客网 时间:2024/04/28 19:41
原子变量适用在共享资源是一个简单的整数值的情况下使用的 完整的锁机制对一个简单的整数来讲就有些浪费
数据定义
atomic_t v;
原子变量保存一个int值 但是不能记录大于24位的整数
使用的是ldrex和strex指令 适用于多核间的并发
具体的API如下
void atomic_set(atomic_t *v, int i);
atomic_t v = ATOMIC_INIT(0);
设置原子变量 v 为整数值 i. 你也可在编译时使用宏定义 ATOMIC_INIT 初始化原子值.
int atomic_read(atomic_t *v);
返回 v 的当前值.
void atomic_add(int i, atomic_t *v);
由 v 指向的原子变量加 i. 返回值是 void, 因为有一个额外的开销来返回新值, 并且大部分时间不需要知道它.
void atomic_sub(int i, atomic_t *v);
从 *v 减去 i.
void atomic_inc(atomic_t *v);
void atomic_dec(atomic_t *v);
递增或递减一个原子变量.
int atomic_inc_and_test(atomic_t *v);
int atomic_dec_and_test(atomic_t *v);
int atomic_sub_and_test(int i, atomic_t *v);
进行一个特定的操作并且测试结果; 如果, 在操作后, 原子值是 0, 那么返回值是真; 否则, 它是假. 注意没有 atomic_add_and_test.
nt atomic_add_negative(int i, atomic_t *v);
加整数变量 i 到 v. 如果结果是负值返回值是真, 否则为假.
int atomic_add_return(int i, atomic_t *v);
int atomic_sub_return(int i, atomic_t *v);
int atomic_inc_return(atomic_t *v);
int atomic_dec_return(atomic_t *v);
就像 atomic_add 和其类似函数, 除了它们返回原子变量的新值给调用者.
- 原子变量
- 原子变量
- 原子变量和原子操作
- Java原子变量&原子操作
- 原子变量的操作
- 原子变量AtomicInteger
- java 原子变量AtomicInteger
- Atomic Variables 原子变量
- Atomic Variables 原子变量
- java原子变量
- Java 原子变量类
- java原子变量
- AtomicReference 原子变量
- 原子变量AtomicInteger
- 原子变量AtomicLong
- 原子变量类
- 多线程 - 原子变量AtomicReference
- Java原子变量类
- bzoj 1121: [POI2008]激光发射器SZK
- 自旋锁
- 为什么建议使用类名调用静态成员?
- NOIP2017爆炸记
- DNA序列对齐
- 原子变量
- noip2017最后一次普及组总结
- go语言最主要的特性
- 正则表达式
- Python中的如何给一个字符串加密
- Java作业杨枝11.11/11.12
- kotlin spring-webflux netty
- grub源码分析---2
- 把已有的repo工程提交到服务器