简述linux自旋锁

来源:互联网 发布:java字符串双引号替换 编辑:程序博客网 时间:2024/05/16 11:16

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资源

   


0 0
原创粉丝点击