Linux内核与驱动开发学习总结:自旋锁和信号量(五)

1、自旋锁和信号量

   使用自旋锁的进程不能睡眠,使用信号量的进程可以睡眠。中断服务例程中的互斥使用的是自旋锁,原因是在中断处理例程中,硬中断是关闭的,这样会丢失可能到来的中断。

2、RCU 锁

http://blog.sina.com.cn/s/blog_6d7fa49b01014q9s.html

讨论的内容包括原子操作;自旋锁,内存屏障;读写自旋锁,顺序锁;信号量,读写信号量,完成量;互斥量;RCU机制;BKL(大内核锁)

通过上述讨论的一些内容,我们可以总结得到以下一些基本观点: 原子操作对整数操作,自旋锁和信号量应用较为广泛。 当临界区小应选择自旋锁,反之,则应选择信号量。 关于信号量的选择问题:信号量是针对进程级的,它在内核中以进程方式运行,故它一般的使用条件是当申请信号量的进程需占用资源较长时间时。 读写自旋锁和读写信号量条件相对于自旋锁和信号量来说放宽不少,这一点可从它们的定义得出。 RCU机制的应用目前越来越广。 内存屏障函数使用起来较为复杂,而且多数情况下需要和具体的体系结构相关,故而一般不建议使用。( 自旋不会睡眠)



你可能感兴趣的:(Linux内核与驱动)