linux原子操作

原创 2012年03月27日 17:34:28

原子操作指的是在执行过程中不会被别的代码路径所中断的操作,下面列出原子操作相关的函数

1.void atomic_set(atomic_t  *v,int  i); //设置原子变量的值为i

2.atomic_t  v = ATOMIC_INIT(0); //定义原子变量V并初始化为0

3.atomic_read(atomic_t  *v); //返回原子变量的值

4.void  atomic_add(int  i,atomic_t  *v); //原子变量增加i

5.void  atomic_sub(int  i,atomic_t  *v); //原子变量减少i

6.void  atomic_inc(atomic_t  *v); //原子变量增加1

7.void  atomic_idec(atomic_t  *v); //原子变量减少1

8.int  atomic_inc_and_test(atomic_t  *v); //原子变量执行自增后测试其是否为0,0则返回true

9.int  atomic_dec_and_test(atomic_t  *v); //原子变量执行自减后测试其是否为0,0则返回true

10.int  atomic_sub_and_test(int  i,atomic_t  *v); //原子变量执行减i后测试其是否为0,0则返回true

11.int  atomic_add_return(int  i,atomic_t  *v); //原子变量执行加i,并返回新值

12.int  atomic_sub_return(int  i,atomic_t  *v); //原子变量执行减i,并返回新值

13.int  atomic_inc_return(atomic_t  *v); //原子变量执行自增,并返回新值

14.int  atomic_dec_return(atomic_t  *v); //原子变量执行自减,并返回新值

 

15.void  set_bit(nr,void  *addr); //设置addr地址的第nr位(写1)

16.void  clear_bit(nr,void  *addr); //清除addr地址的第nr位(写0)

17.void  change_bit(nr,void  *addr); //对addr地址的第nr位进行反置

18.test_bit(nr,void  *addr); //返回addr地址的第nr位

19.int  test_and_set_bit(nr,void  *addr);  //18+15

20.int  test_and_clear_bit(nr,void  *addr);  //18+16

21.int  test_and_change_bit(nr,void  *addr);  //18+17

 

Linux内核的原子操作

1、基本概念 原子操作可以保证指令以原子的方式执行,执行过程不被打断。它通过把读取和修改变量的行为包含在一个单步中执行,从而防止了竞争的发生,保证操作结果总是一致的。 例如: int...
  • kobejayandy
  • kobejayandy
  • 2014年07月17日 00:21
  • 1780

linux中关于原子操作

原子操作:就是在执行某一操作时不被打断。 linux原子操作问题来源于进程的抢占以及多核smp系统中程序的并发执行。 对于临界区的操作可以加锁来保证原子性,对于全局变量或静态变量操作则需要依赖于硬件平...
  • xiaoaide01
  • xiaoaide01
  • 2016年08月02日 15:32
  • 3127

Linux的原子操作与同步机制

Linux的原子操作与同步机制   并发问题 现代操作系统支持多任务的并发,并发在提高计算资源利用率的同时也带来了资源竞争的问题。例如C语言语句“count++;”在未经编译器优化时生成的汇编代...
  • zgrjkflmkyc
  • zgrjkflmkyc
  • 2014年12月01日 16:58
  • 1632

Linux 原子操作实现

Futex
  • k_cnoize
  • k_cnoize
  • 2017年02月10日 19:14
  • 232

Linux原子操作及函数

所谓的原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就是说,它的最小的执行单位,不能有比它更小的执行单元,因此这里的原子实际是使用了物理学里物质微粒的概念。 原子操作需要...
  • u012041204
  • u012041204
  • 2016年10月24日 12:08
  • 916

linux用户空间下的原子操作

Atomic Operations “Where did atomic.h go?!?” ..was my surprised reaction when I compiled one of ...
  • bingqingsuimeng
  • bingqingsuimeng
  • 2012年08月27日 14:09
  • 2819

Linux互斥与同步之原子操作

例子 一个全局共享的变量flag int flag=0 进程A void funcA() { flag++; } 进程B void funcB() { flag...
  • longwang155069
  • longwang155069
  • 2016年07月20日 09:57
  • 694

Linux应用开发--原子操作

对于操作一个文件,我们想在文件末尾追加一些内容,如果是单个进程的话那么能没有任何问题的完成任务,但如果多个进程都想给文件追加内容的话那就容易出问题了,出现什么问题呢?就是最后的操作结果根本就不是你能接...
  • tqs_1220
  • tqs_1220
  • 2017年11月14日 16:44
  • 69

聊聊原子操作那些事

原子操作,线程间交互数据最细粒度的同步操作,它可以保证线程间读写某个数值的原子性。由于不需要加重量级的互斥锁进行同步,因此非常轻量,而且也不需要在内核间来回切换调度,效率是非常高的。。那如何使用原子操...
  • waruqi
  • waruqi
  • 2016年11月17日 16:07
  • 952

Linux用户层多线程无锁化原子操作

Linux用户层多线程无锁化原子操作
  • shemangui
  • shemangui
  • 2016年01月01日 11:23
  • 1001
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux原子操作
举报原因:
原因补充:

(最多只允许输入30个字)