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

    还有更多的其他方式,待发现。。。

猜你喜欢

转载自blog.csdn.net/TSZ0000/article/details/83214461