1.內核中信號量的使用
a.信號量對應的頭文件:
<asm/semaphore.h>
b.定義信號量:
struct semaphore sem;
c.初始化信號量:
void sema_init(struct semaphore *sem, int val) // 將信號量sem值設置爲val
void init_MUTEX(struct semaphore *sem) // 初始化一下互斥鎖,並把sem設置爲1
void init_MUTEX_LOCKED(struct semaphore *sem) // 初始化一下互斥鎖,並把sem設置爲0
DECLARE_MUTEX(name) // 定義一個名字爲name的信號量,並初始化爲1
DECLARE_MUTEX_LOCKED(name) // 定義一個名字爲name的信號量,並初始化爲0
d.獲取信號量:
void down(struct semaphore *sem) // 該函數將sem減1.如果減1後爲非負數時
// 會直接返回;如果爲負否則調用者被掛起
void down_interruptible(struct semaphore *sem) // 獲取信號量失敗時,TASK_INTERRUPTIBLE睡眠
// 返回值:0 -> 實信號喚醒; -EINTR -> 被中斷喚醒
void down_killable(struct semaphore *sem) // 獲取信號量失敗時,TASK_KILLABLE睡眠
e.釋放信號量:
void up(struct semaphore *sem) // 把sem的值加1.可喚醒等待該信號的任務
2.內核中自旋鎖的使用
a.定義自旋鎖:
void spin_lock_init(x) // 該宏用於初始化自旋鎖x
b.獲取自旋鎖:
int spin_lock(x) // 獲取鎖x.成功則立即返回,否則一直等待
int spin_trylock(x) // 獲取鎖x.立即返回.返回真-獲取成功;返回假-失敗
c.釋放自旋鎖:
void spin_unlock(x) // 與spin_lock()或者spin_trylock成對使用