- 信号量(sleep)
- 定义信号量:
- struct semaphore sem;
- 初始化信号量:
- void sema_init(struct semaphore *sem, int val)
- 初始化互斥锁信号量:
- void init_MUTEX(struct semaphore *sem);//将sem的值置为1
- void init_MUTEX_LOCKED(struct semaphore *sem)//将sem的值置为0
- 定义初始化合二为一的宏:
- DECLARE_MUTEX(sem)//sem的值置为1
- DECLARE_MUTEX_LOCKED(sem)//sem的值置为0
- 获取信号量:
- void down(struct semaphore *sem)//成功则sem的值减1
- int down_interruptible(struct semaphore *sem)//与down(struct semaphore *sem)相同,但是可以被中断
- down_killable(struct semaphore *sem)//是进程睡眠在TASK_KILLABLE类型的睡眠状态
- 释放信号量:
- void up(struct semaphore *sem)//成功则sem的值加1
- 自旋锁(busy)
- 初始化
- spin_lock_init(lock);
- 获取自旋锁
- spin_lock(lock);
- spin_trylock(lock);
- 释放自旋锁
- spin_unlock(lock);
- 总结: 信号量可以拥有多个持有者,而自旋锁只能有一个;
- 信号量适合于保持时间较长的情况,自旋锁适合于保持时间非常短的情况;