1、自旋锁不能递归
2、自旋锁可以用在中断上下文,但是信号量不可以,因为可能睡眠,但是在中断上下文获取自旋锁之前要先禁用本地中断(防止在自选锁的临界区内发生中断,则有可能出现死锁)。
3、自旋锁的核心要求是:拥有自旋锁的代码不能睡眠,要一直持有CPU到释放自旋锁
4、信号量和读写信号量适用于保持时间较长的情况,他们可能会导致调用者睡眠,因此只能在进程上下文使用。而自旋锁适用于保持时间非常短的情况,他可以在任何上下文使用。
a、如果被保护的共享资源只在进程上下文访问,信号量更合适,如果共享资源非常短,自旋锁亦可。
b、如果被保护的共享资源需要在中断上下文访问,就必须用自旋锁(中断上半部【软中断】,运行在中断上下文,另外下半部分两种:tasklet【小任务】运行在中断上下文,workqueue运行在进程上下问题)。即tasklet中共享资源必须用自旋锁,workqueue必须用信号量。
5、自旋锁应用场景
a、自旋锁保持期间,禁止抢占
b、自旋锁只有在内核可强占或SMP(多处理器)的情况下才真正需要,在单核CPU且不可抢占的内核(历史内核)下,自旋锁的所有操作都是空操作。
c、历史内核情况,中断上下文,没有自选锁的情况下,通过禁止中断的情况下,防止抢占。
2、自旋锁可以用在中断上下文,但是信号量不可以,因为可能睡眠,但是在中断上下文获取自旋锁之前要先禁用本地中断(防止在自选锁的临界区内发生中断,则有可能出现死锁)。
3、自旋锁的核心要求是:拥有自旋锁的代码不能睡眠,要一直持有CPU到释放自旋锁
4、信号量和读写信号量适用于保持时间较长的情况,他们可能会导致调用者睡眠,因此只能在进程上下文使用。而自旋锁适用于保持时间非常短的情况,他可以在任何上下文使用。
a、如果被保护的共享资源只在进程上下文访问,信号量更合适,如果共享资源非常短,自旋锁亦可。
b、如果被保护的共享资源需要在中断上下文访问,就必须用自旋锁(中断上半部【软中断】,运行在中断上下文,另外下半部分两种:tasklet【小任务】运行在中断上下文,workqueue运行在进程上下问题)。即tasklet中共享资源必须用自旋锁,workqueue必须用信号量。
5、自旋锁应用场景
a、自旋锁保持期间,禁止抢占
b、自旋锁只有在内核可强占或SMP(多处理器)的情况下才真正需要,在单核CPU且不可抢占的内核(历史内核)下,自旋锁的所有操作都是空操作。
c、历史内核情况,中断上下文,没有自选锁的情况下,通过禁止中断的情况下,防止抢占。