1 基础概念
信号量在创建时需要设置一个初始值,表示同时可以有几个任务可以访问该信号量保护的共享资源,初始值为1就变成互斥锁(Mutex),即同时只能有一个任务可以访问信号量保护的共享资源。
一个任务要想访问共享资源,首先必须得到信号量,获取信号量的操作将把信号量的值减1,若当前信号量的值为负数,表明无法获得信号量,该任务必须挂起在该信号量的等待队列等待该信号量可用;若当前信号量的值为非负数,表示可以获得信号量,因而可以立刻访问被该信号量保护的共享资源。
当任务访问完被信号量保护的共享资源后,必须释放信号量,释放信号量通过把信号量的值加1实现,如果信号量的值为非正数,表明有任务等待当前信号量,因此它也唤醒所有等待该信号量的任务。
2 信号量的API
ECLARE_MUTEX(name)
|
DECLARE_MUTEX_LOCKED(name)
|
void sema_init (struct semaphore *sem, int val);
|
void init_MUTEX (struct semaphore *sem);
|
void init_MUTEX_LOCKED (struct semaphore *sem);
|
void down(struct semaphore * sem);
|
int down_interruptible(struct semaphore * sem);
|
int down_trylock(struct semaphore * sem);
|
void up(struct semaphore * sem);
|
原文地址:http://blog.csdn.net/hustyangju/article/details/40393091