多线程(12)atomic 原子操作系列接口

多线程(12)atomic 原子操作系列接口

1. 原子操作

所谓原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断。也就说,它是最小的执行单位,不可能有比它更小的执行单位,因此这里的原子实际是使用了物理学里的物质微粒的概念。
  总结就是: 不可中断的操作。

2. 使用场景

原子操作主要用于实现资源计数
很多引用计数(refcnt)就是通过原子操作实现的。

3. 接口

  1. atomic_read(atomic_t * v); 原子读操作,它返回原子类型的变量v的值

  2. atomic_set(atomic_t * v, int i); 设置原子类型的变量v的值为i

  3. void atomic_add(int i, atomic_t *v); 给原子类型的变量v增加值i

  4. atomic_sub(int i, atomic_t *v); 从原子类型的变量v中减去i。

  5. int atomic_sub_and_test(int i, atomic_t *v); 从原子类型的变量v中减去i,并判断结果是否为0,如果为0,返回真,否则返回假。

  6. void atomic_inc(atomic_t *v); 对原子类型变量v原子地增加1。

  7. void atomic_dec(atomic_t *v); 对原子类型的变量v原子地减1。

  8. int atomic_add_negative(int i, atomic_t *v);
    对原子类型的变量v原子地增加I,并判断结果是否为负数,如果是,返回真,否则返回假。

  9. int atomic_add_return(int i, atomic_t *v);
    对原子类型的变量v原子地增加i,并且返回指向v的指针。

  10. int atomic_sub_return(int i, atomic_t *v);
    从原子类型的变量v中减去i,并且返回指向v的指针。

  11. int atomic_inc_return(atomic_t * v);
    对原子类型的变量v原子地增加1并且返回指向v的指针。

  12. int atomic_dec_return(atomic_t * v);
    对原子类型的变量v原子地减1并且返回指向v的指针。

参考

https://www.cnblogs.com/still-smile/p/11652788.html
https://www.cnblogs.com/wanghuaijun/p/7705045.html

发布了142 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/lqy971966/article/details/104751966