Linux驱动 之同步机制总结:
自旋锁和互斥锁使用场合:
需求 | 建议的加锁 |
---|---|
低开销加锁 | 优先使用自旋锁 |
短期锁定 | 优先使用自旋锁 |
长期锁定 | 优先使用互斥体 |
中断上下文中加锁 | 使用自旋锁 |
持有锁需要睡眠 | 使用互斥体 |
在中断上下文中只能使用自旋锁,而在任务睡眠时只能使用互斥体
长时间睡眠,采用信号量、互斥体
短时间,采用自旋锁
相关视频讲解,B站 一口Linux :https://www.bilibili.com/video/BV1M64y127kA
信号量和互斥体的选择:
-
互斥体和信号量很相似,内核中两者共存会令人混淆。所幸,它们的标准使用方式都有简单规范︰
除非mutex的某个约束妨碍你使用,否则相比信号量要优先使用mutex。 -
当你写新代码时,只有碰到特殊场合(一般是很底层代码)才会需要使用信号量。因此建议
选mutex。如果发现不能满足其约束条件,且没有其他别的选择时,再考虑选择信号量。