自己看了半天LDD3关于自旋锁的部分,开始很是迷惑,慢慢想明白了,分享一下自己的理解.
1.自旋锁为什么要禁止抢占?
加入进程A拥有自旋锁的过程中被B抢占,而B企图获取同一个自旋锁,理想情况下B也要白白耗尽自己的时间片,等待A释放自旋锁。糟糕的情况是系统死锁或者崩溃。
2.使用自旋锁前为什么要禁止中断?
首先,并不是所有情况下需要这么做。只有当进程上下文和中断上下文中都会使用同一个自旋锁时才需要禁止中断。
假如进程A获取自旋锁之后,中断B发生,如果B企图获取A拥有的自旋锁,B就会一直自旋下去,非中断代码没有机会获得这个CPU.因为中断程序运行期间无法进行进程切换。
3.获得自旋锁之后为什么不能阻塞?
进程阻塞将会导致内核抢占,另一个进程被调用。另一个进程可能企图获取同一个自旋锁。这会引起第一条上所说的问题。