内核中常用的同步原语使用说明

来源:互联网 发布:手机淘宝解绑银行卡 编辑:程序博客网 时间:2024/04/28 19:35

内核中常用的同步原语使用说明

在可以休眠的地方,一般使用mutexsemaphore, 不可以休眠的地方一般用spinlock(自旋锁)

mutex/semaphore: 可以在无法进入临界区的时候进入休眠状态, 一般不能用在中断或其他异步上下文中

使用:

DEFINE(mutex);   mutex_lock()  / mutex_unlock()

spinlock: 在无法进入临界区的时候就一直在那不停的获取锁, 一般用在不能休眠的地方, 因此甚至内核里在使用spinlock的时候都会禁止CPU的抢占调度方式, 总之,适用于spinlock的核心规则是: 任何拥有spinlock的代码都必须是原子的,  使用规则:  1) 不能休眠, 2) 如果spinlock同时也被中断上下文使用则应获取锁的时候关闭中断, 3) spinlock必须在尽可能短的时间内完成.

使用:

spinlock_t my_lock;   spin_lock_init();  spin_lock()/spin_lock_irqsave()/ spin_lock_irq() / spin_lock_bh();    spin_unlock()/spin_unlock_irqrestore()/spin_unlock_irq()/spin_unlock_bh

 
原创粉丝点击