jas*_*foo 7 linux synchronization mutex linux-kernel
我正在阅读Linux内核开发,并对互斥锁和信号量之间的差异感到困惑.
作者说:
中断处理程序或下半部分无法获取互斥锁
我知道互斥锁可能会导致睡眠,并且中断处理程序不会在任何特定的进程上下文中运行,因此不允许使用互斥锁或信号量.但是下半部分可以用工作队列实现,它可以睡觉.
那么,为什么下半部分无法获得互斥量呢?简单和效率是关注在这里还是其他什么?
创建互斥体的主要动机是简单和高效。由于下半部的同步可能很复杂,因此建议在下半部避免互斥。下半部分的设计不适合互斥体。例如。互斥锁应该在相同的上下文中锁定/解锁- 在下半部分的情况下这将很难遵循。
理论上,您可以决定以不同的方式实现整个中断处理,其中互斥体的使用是合理的。就像“线程”中断处理程序一样。http://lwn.net/Articles/380931/