spinlock, semaphore 和 mutex


1. Spinlock 只适用于短暂的等待,因为没有进程切换所以对于短暂等待他的效率会比较高。 但是对于长时间等待,由于它的CPU占用是100% 等的越长越不合算。
   Semaphore的实现机制可以描述如下:CPU首先会检测信号量是否可获取,如果无法获取该信号量,那么就会导致一次上下文调度操作。从实现机制上来看,semaphore操作效率比较低,而spinlock的效率相对较高,但是这种效率的高低与应用相关,如果临界区操作的时间过长,那么采用spinlock会浪费大量的CPU时间,还不如做几次上下文调度释放CPU资源呢。所以,spinlock的应用有一个原则,那就是临界区操作尽可能的短,让CPU不要自璇太多的时间,这一点从spinlock的实现代码上也可以看出一些端倪,Linux开发人员着这个地方花费了好多心计。
2.Spinlock只能在多个CPU的系统上用,因为等待者占据了100%的CPU,只由另外一个CPU上的进程才能解锁。
3.不允许睡眠的上下文需要采用spinlock,可以睡眠的上下文可以采用semaphore。在中断上下文中访问的竞争资源一定采用spinlock。
4、临界区操作较长的应用建议采用semaphore,临界区很短的操作建议采用spinlock。
5、 需要关中断的场合需要调用spinlock_irq或者spinlock_irqsave,不明确当前中断状态的地方需要调用spinlock_irqsave,否则调用spinlock_irq。一个资源既在中断上下文中访问,又在用户上下文中访问,那么需要关中断,如果仅仅在用户上下文中被访问,那么无需关中断。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值