1、linux中为什么要引入自旋锁?
我们知道,如果一段临界区代码既可被进程执行,也可受中断影响。那么我们保护它的方式就是开、关中断。
但是如果是多处理机呢?我们知道linux内核从1.3开始就支持SMP(Symmetrical Multi-Processing)了。显然在多个CPU在同时执行代码时,
上述的方法就保护不了临界区了。这个时候我们引入了自旋锁。
2、自旋锁的思想是什么?
自旋锁的思想就是在一个密封的循环中不断对一个资源(一把锁)进行夺取,直到获得到该资源。
3、自旋锁的特点有什么?
自旋锁最重要的特点是线程在等待锁被释放时一直占据CPU。
4、使用自旋锁的前提有什么?
自旋锁的基本前提是线程在某处理机上忙等一个资源,而另一个线程在不同处理机上正使用这个资源,这只有在多处理机上才有可能。
5、单处理机中可否使用自旋锁?
单处理机中是可以使用自旋锁的,但前提是保证线程在持有锁的时候不可以放弃对CPU的控制,也就是不可以在持有锁期间使用调度程序。否则,就会进入死循环。
6、自旋锁的类型?
(1)普通自旋锁 (2)读写自旋锁 (3)big-reader自旋锁
7、自旋锁与互斥锁的异同?
我们知道,自旋锁与互斥锁都是为对临界资源进行保护而创造的一种锁机制。不同之处在于,执行单元在持有互斥锁期间,其它需要该资源的执行单元是要进入睡眠状态的。而执行单元持有自旋锁期间,其它需要该资源的执行单元是进行不断的尝试的,直到持有自旋锁的单元释放自旋锁,则可以获得该资源。自旋锁这个名字也是由此得来。而且,由于需要获得该锁的单元不断进行尝试,所以,自旋锁的效率是远高于互斥锁的。
8、自旋锁的缺点?
(1)可能引起死锁 (2)过多的占用CPU资源