信号量有一种情况是不能使用的,例如需要保护的临界资源有可能被中断程序访问的情况。试想一下这种情况,假如在中断程序中访问一个被信号量保护的资源,如果该资源已经被占用,那么该中断程序就会陷入睡眠,而中断是不能睡眠的。这时候只能使用下面的自旋锁函数对:
void spin_lock_irq(spinlock_t *lock);
void spin_unlock_irq(spinlock_t *lock);