自旋锁特点: (1) 自旋锁机制本身不会休眠,所以可以用于不能休眠的代码中(如IRQ 例程)。 (2) 自旋锁有性能优势(加锁/解锁 约7us) 并发是需要同步操作的根源,在SMP上并发的来源如下: A 进程间的抢占 B 异步中断事件 C 两个以上的CPU,执行同一段代码 如果有一段critical code需要在上面的A、B、C三种情况下都有可能执行到,可使用spin_lock_irq(&lock),因为 (1) 自旋锁本身是禁止本CPU上的抢占,所以A不可能发生 (2) Spin_lock_irq(&lock)是关本CPU上的中断的,所以B不可能发生 (3) 对于C情况,CPU0没有释放自旋锁时,CPU1一直忙等待,但不会死锁 总结,需思考所要保护的资源的并发执行场景。然后决定是否使用自旋锁,以及使用哪种自旋锁。自旋锁使用不当会有如下问题: (1) 死锁 (2) 受保护的critical code太多,可能阻止本CPU的任务调度(更高优先级的任务不得不等待),或者其它CPU忙等(不做任何事情)。
==========
|
spin_lock_irqsave
最新推荐文章于 2024-03-07 18:17:59 发布