Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1226209
  • 博文数量: 479
  • 博客积分: 12240
  • 博客等级: 上将
  • 技术积分: 4999
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-24 17:12
文章分类

全部博文(479)

文章存档

2014年(1)

2013年(1)

2012年(1)

2011年(95)

2010年(177)

2009年(167)

2008年(16)

2007年(21)

分类: LINUX

2010-10-22 19:37:12


定义一个信号量:
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);           //释放信号量






阅读(1250) | 评论(2) | 转发(1) |
0

上一篇:U-Boot相关文章汇总

下一篇:Linux内核延时

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

chinaunix网友2010-10-25 16:19:00

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com

chinaunix网友2010-10-25 16:18:53

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com