1. 程式人生 > >Linux-核心執行緒通訊

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

    還有更多的其他方式,待發現。。。