您的位置:首页 > 运维架构 > Linux

Linux内核同步机制——原子操作

2009-05-12 21:24 507 查看
原子操作定义:
原子操作为不可分割的,在执行完毕不会被任何其它任务或事件中断的操作

头文件位置:
/usr/src/kernels/2.6.9-55.EL-hugemem-i686/include/asm-i386/atomic.h

原子变量原型定义:
typedef struct { volatile int counter; } atomic_t;

说明:类型atomic_t为一个实际的int类型的变量,volatile描述白变量类型在编译是不做优化。

相关函数:

【1】初始化
ATOMIC_INIT(value);
#define atomic_set(v,i) (((v)->counter) = (i))

【2】相加 static __inline__ void atomic_add(int i, atomic_t *v)

【3】自增 static __inline__ void atomic_inc(atomic_t *v)

【4】相减 static __inline__ void atomic_sub(int i, atomic_t *v)

【5】自减 static __inline__ void atomic_dec(atomic_t *v)

【6】读取 #define atomic_read(v) ((v)->counter)

【7】减操作后判断是否为0 static __inline__ int atomic_sub_and_test(int i, atomic_t *v)

【8】递减后判断是否为0 static __inline__ int atomic_dec_and_test(atomic_t *v)

【9】自增后判断是否为0 static __inline__ int atomic_inc_and_test(atomic_t *v)

【10】相加后是否为负值 static __inline__ int atomic_add_negative(int i, atomic_t *v)

【11】相加后返回 static __inline__ int atomic_add_return(int i, atomic_t *v)

【12】相见后返回 static __inline__ int atomic_sub_return(int i, atomic_t *v)

【13】自增后返回 #define atomic_inc_return(v) (atomic_add_return(1,v))

【14】自减后返回 #define atomic_dec_return(v) (atomic_sub_return(1,v)

【15】掩码清除 #define atomic_clear_mask(mask, addr)

【16】掩码设置 #define atomic_set_mask(mask, addr)

实例:
在这里演示如何初始化、相加和读取操作

#include </usr/src/kernels/2.6.9-55.EL-hugemem-i686/include/asm-i386/atomic.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char** argv)
{
int val = 0;

atomic_t my_counter=ATOMIC_INIT(0);

atomic_set( &my_counter, 0 );
atomic_add( 2, &my_counter );

val = atomic_read( &my_counter );

printf("get atomic_value :%d/n",val);
return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: