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

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

在可以休眠的地方,一般使用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

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值