Linux-核心執行緒通訊
互斥鎖
DEFINE_MUTEX 靜態定義和初始化一個互斥鎖,static DEFINE_MUTEX(fsl_ifc_nand_mutex); mutex_init 動態初始化一個互斥鎖,mutex_init(&ecc->lock); mutex_lock 加鎖,阻塞引起睡眠,不能被中斷,mutex_lock(&bch->lock); mutex_lock_interruptible 阻塞引起睡眠,不能被中斷,mutex_lock_interruptible(&ecc->lock); mutex_unlock 解鎖,mutex_unlock(&ecc->lock);
自旋鎖
spin_lock_init 初始化自旋鎖x,spin_lock_init(x); spin_lock 加鎖,不會引起阻塞和睡眠 spin_trylock 盡力獲得自旋鎖,如果能立即獲得鎖,並返回真,否則不能獲得鎖,立即返回假 spin_unlock 釋放自旋鎖
訊號量
static DEFINE_SEMAPHORE(console_sem); sema_init 初始化設定訊號量的初值,sema_init(&console_sem, 1); down 獲得訊號量sem,引起睡眠,因此不能在中斷上下文,判斷sem大於0,減1繼續執行,否則掛起等待訊號量,down(&console_sem); down_interruptible 可被訊號中斷; down_trylock 獲得訊號量失敗馬上返回,不會引起睡眠; up 釋放訊號量sem,把sem的值加1,up(&console_sem);
讀寫訊號量
init_rwsem down_read down_write up_read up_write
還有更多的其他方式,待發現。。。