Chinaunix首页 | 论坛 | 博客
  • 博客访问: 693351
  • 博文数量: 192
  • 博客积分: 1875
  • 博客等级: 上尉
  • 技术积分: 2177
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-23 23:21
个人简介

有时候,就是想窥视一下不知道的东东,因为好奇!

文章分类

全部博文(192)

文章存档

2024年(8)

2023年(3)

2020年(1)

2019年(1)

2018年(1)

2017年(2)

2016年(69)

2015年(53)

2014年(14)

2013年(1)

2012年(5)

2011年(25)

2010年(9)

分类: LINUX

2011-02-17 00:19:10

p { margin-bottom: 0.21cm; }

信号量

1.信号量

      从本质上说,它实现了一个加锁原语,即让等待者睡眠,直到等待的资源变为空闲。

内核信号量类似于自旋锁,最大的不同在于,内核控制路径试图获取内核信号量所保护的资源时,相应的进程被挂起。只有在资源被释放时,进程才再次变为可运行的。因此,只有可以睡眠的函数才能获取内核信号量,中断处理程序和可延迟函数都不能使用内核信号量

     信号量可以有任意数量的持有者。只拥有一个持有者的信号量称为互斥信号量。

2.linux内核中的信号量

1>初始化信号量

静态

static DECLARE_SEMAPHORE_GENERIC(name,count);

static DECLARE_MUTEX(name); //互斥信号量

动态

struct semaphore sem;

sema_init(sem,count);

init_MUTEX(sem);

init_MUTEX_LOCKED(sem);

2>获取信号量

down(struct semaphore *sem);

down_interruptible(struct semaphore *sem);

down_trylock(struct semaphore *sem);

3>释放信号量

up(struct semaphore *sem);

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

上一篇:读写自旋锁

下一篇:读写信号量

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