Chinaunix首页 | 论坛 | 博客
  • 博客访问: 411198
  • 博文数量: 380
  • 博客积分: 75
  • 博客等级: 民兵
  • 技术积分: 1925
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-05 15:35
文章分类

全部博文(380)

文章存档

2014年(1)

2013年(2)

2012年(19)

2011年(358)

我的朋友

分类:

2011-09-05 18:25:34

原文地址:信号量 作者:chenxibing008


定义一个信号量:
struct semaphore xx_sem;

初始化信号量:
void sema_init(struct semaphore *sem, int val);
把信号量sem初始化为val。如果把信号量初始化为大于1的数,则变成一个计数信号量,不过一般不要这样做。

初始化互斥信号量:
void init_MUTEX(struct semaphore *sem);
初始化sem为1,等同于:
sema_init(struct semaphore *sem, 1);

void init_MUTEX_LOCKED(struct semaphore *sem);
将信号量sem初始化为0;等同于
sema_init(struct semaphore *sem, 0);

简便初始化方式:
DECLARE_MUTEX(xx_sem)         //初始化为1
DECLARE_MUTEX_LOCKED(xx_sem)  //初始化为0

说明:将信号量初始化为0,可以用于同步。



获取信号量:
void down(struct semaphore *sem);
获取信号量sem;会导致睡眠,不能在中断上下文使用。

void down_interruptible(struct semaphore *sem);
由于down()而进入睡眠的进程不能被信号打断;而因为down_interruptible()进入睡眠的进程可以被信号打断。

int down_trylock(struct semaphore *sem);
尝试获得信号量sem,如果获取成功,立即返回0;否则返回飞0值。不会导致调用者睡眠,可以在中断上下文使用

释放信号量:
void up(struct semaphore *sem);



一般用法:

DECLARE_MUTEX(xx_sem); //定义并初始化信号量
down(&xx_sem);         //获取信号量
。。。。。。             //临界区
up(&xx_sem);           //释放信号量






阅读(303) | 评论(0) | 转发(0) |
0

上一篇:Linux内核延时

下一篇:vim格式化C文件

给主人留下些什么吧!~~