有时候,就是想窥视一下不知道的东东,因为好奇!
分类: LINUX
2011-02-17 00:19:10
信号量
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);