进程上下文和定时器函数之间的同步
Synchronisation between process context and timer function
我想在进程上下文(具体来说是在 queuecommand 函数中)和计时器函数中自动更新数据结构。在流程上下文中,我应该使用 spin_lock_bh
或 spin_lock_irq
还是只使用 spin_lock
?
根据我的理解,我们应该在queuecommand(进程上下文)中使用spin_lock_bh
,而在定时器函数中只使用spin_lock
。我说得对吗?
如果我没理解错的话,大概是timer_list
(bottom half context)。那么你的假设是正确的:是的,在进程上下文和[=中使用spin_lock_bh
就足够了计时器处理程序中的 27=]spin_lock
(timer_list
的 function
)。但这只有 如果锁(和相应的数据结构)仅在提到的上下文中使用[=48] =] 没有使用它中断处理程序。如果是这样,你需要例如spin_lock_irq
。
另请记住,您不应在 spin_lock*
-spin_unlock*
.
中使用休眠函数
Linux 内核源代码中有很多示例,例如:
- spin_lock in timer + spin_lock_bh 在进程上下文中;
- spin_lock in interrupt handler and spin_lock_irq 在计时器中。
我想在进程上下文(具体来说是在 queuecommand 函数中)和计时器函数中自动更新数据结构。在流程上下文中,我应该使用 spin_lock_bh
或 spin_lock_irq
还是只使用 spin_lock
?
根据我的理解,我们应该在queuecommand(进程上下文)中使用spin_lock_bh
,而在定时器函数中只使用spin_lock
。我说得对吗?
如果我没理解错的话,大概是timer_list
(bottom half context)。那么你的假设是正确的:是的,在进程上下文和[=中使用spin_lock_bh
就足够了计时器处理程序中的 27=]spin_lock
(timer_list
的 function
)。但这只有 如果锁(和相应的数据结构)仅在提到的上下文中使用[=48] =] 没有使用它中断处理程序。如果是这样,你需要例如spin_lock_irq
。
另请记住,您不应在 spin_lock*
-spin_unlock*
.
Linux 内核源代码中有很多示例,例如:
- spin_lock in timer + spin_lock_bh 在进程上下文中;
- spin_lock in interrupt handler and spin_lock_irq 在计时器中。