April 23, 2021
6:27 a.m.
Hi,
I think the main idea spinlock disables preemption is,
the other process that's spinning on the lock can acquire lock.
but in some implementations of spinlock, like qspinlock in x86 (or mcs lock), I think there's no need to disable preemption. because processes waiting for lock cannot acquire the lock before the lock holder hand over to other process.
Are you talking about disabling local irq(ex. spin_lock_irqsave)? If so, think about the situation that a process holding the lock is preempted by interrupt. And that interrupt handler tries to grab the spinlock. It will lead to deadlock.