Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1452668
  • 博文数量: 150
  • 博客积分: 65
  • 博客等级: 民兵
  • 技术积分: 3415
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-25 10:30
个人简介

游戏后台开发

文章分类

全部博文(150)

文章存档

2020年(1)

2019年(4)

2017年(3)

2016年(6)

2015年(4)

2014年(45)

2013年(86)

2012年(1)

分类: LINUX

2013-12-08 00:37:48

当把声明为该类型会保证该变量在使用或赋值时, 无论是在32位还是64位的机器上都能保证操作是原子的, 它会根据机器的类型自动适应。
这个类型是定义在signal.h文件中。下面来说说这个类型。
在处理信号(signal)的时候,有时对于一些的访问希望不会被中断,无论是还是软件中断,这就要求访问或改变这些变量需要在计算机的一条指令内完成。通常情况下,int类型的通常是原子访问的,也可以认为 sig_atomic_t就是int类型的数据,因为对这些变量要求一条指令完成,所以sig_atomic_t不可能是,只会是数字类型。
在linux里这样定义:
typedef int __sig_atomic_t;
另外gnu c的文档也说比int短的类型通常也是具有原子性的,例如short类型。同时,(地址)类型也一定是原子性的。 该类型在所有gnu c库支持的系统和支持posix的系统中都有定义。

1Linux内核中的原子操作 atomic_t

原型:
typedef struct {
volatile int counter;
} atomic_t;
1 声明,定义并初始化原子变量
atomic_t isopen = ATOMIC_INIT(1);
2 使用方法
原子变量自减1,并测试是否为0,如果为0,返回true,否则返回false
if( !atomic_dec_and_test(&isopen) ) {
atomic_inc(&isopen); //加1操作
return -EBUSY;
}
3 释放
减1操作
atomic_dec(&isopen);
阅读(1978) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~