自旋锁使用的注意点

来源:互联网 发布:淘宝付款人数多久更新 编辑:程序博客网 时间:2024/05/16 14:12

1. 自旋锁保护的临界区里,不能有引起睡眠的函数,如kmalloc,copy_from_user等。

    因为如果某进(线)程获得锁并进入了临界区,但它却在临界区里睡着了,那么别的需要这把锁的进(线)程将可能要等待一段很久的时间,最坏的情况是死锁。

    所以,在自旋锁里的临界区代码应是原子性的,不可睡眠的。

2. 在LDD3里说到这样的一种情况: 在单CPU环境里,如果某进(线)程获得了锁并准备对它的设备进行存取,此时发生了中断,而中断处理也要对该设备进行存取所以中断处理程序也要获得那个锁,但现在锁被刚才某进(线)程得了,所以当中继处理程序在自旋,而在单CPU环境里, 非中断代码又不能运行来释放锁,那么这个CPU将永远自旋。

3. 自旋锁的持有时间应尽可能的短。因为临界区太大,持有时间太长,其他进程可能面临长时间等待,降低了系统性能。

原创粉丝点击