信号量本质
计数器,用来控制对公共资源的访问
信号量特点
- 长时期的资源占用
- 获取信号量失败,触发上下文调度
- 当前进程(线程)陷入休眠,系统开销大
信号量相关API
定义信号量
struct semaphore sem;
初始化信号量
static inline void sema_init(struct semaphore *sem, int val)
参数:
- sem:指定要初始化的信号量
- val:信号量的初始值
获取信号量
void down(struct semaphore *sem);
参数:
- sem:指定要初始化的信号量
尝试获取信号量
int down_trylock(struct semaphore *sem)
尝试获取一次信号量,获取成功返回0,获取失败返回非0值。
释放信号量
void up(struct semaphore *sem)
参数:
- sem:指定要初始化的信号量