信号量
时间:2010-10-22 来源: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); //释放信号量
相关阅读 更多 +