在中断上下文中只能用自旋锁,而在任务睡眠的时候只能用信号量。
自旋锁与信号量的比较
需求 | 建议的加锁方法 |
低开销加锁 | 优先使用自旋锁 |
短期锁定 | 优先使用自旋锁 |
长期加锁 | 优先使用信号量 |
中断上下文中加锁 | 使用自旋锁 |
持有锁需要睡眠 | 使用信号量 |
CSDN网友lioqio的回答:
用处:
自旋锁用于多处理器之间的同步,
信号量用于多线程之间的同步。
实现:
在多处理器平台下,信号量的实现会用到自旋锁
自旋锁一般通过特殊的机器指令来实现
使用:
自旋锁保护范围内不能作调度(当然不能进入睡眠),
不能存取可分页内存,当中断处理程序也有同样的自
旋锁时,必须在进入时关闭相关中断。
信号量没有太多的限制。但是在实时响应上无法预测的。
spinlock与linux内核调度的关系