C 进程上下文和计时器功能之间的同步

C 进程上下文和计时器功能之间的同步,c,linux,timer,linux-kernel,spinlock,C,Linux,Timer,Linux Kernel,Spinlock,我想在进程上下文(具体在queuecommand函数中)和计时器函数中以原子方式更新数据结构。在流程上下文中,我应该使用spin\u lock\u bh还是spin\u lock\u irq还是只使用spin\u lock 根据我的理解,我们应该在queuecommand(进程上下文)中使用spin\u lock\u bh,在计时器函数中使用spin\u lock。我说的对吗?如果我理解正确,那是关于()。那么您的假设是正确的:是的,在进程上下文中使用旋转锁和在计时器处理程序中使用旋转锁(计时器

我想在进程上下文(具体在queuecommand函数中)和计时器函数中以原子方式更新数据结构。在流程上下文中,我应该使用
spin\u lock\u bh
还是
spin\u lock\u irq
还是只使用
spin\u lock


根据我的理解,我们应该在queuecommand(进程上下文)中使用
spin\u lock\u bh
,在计时器函数中使用
spin\u lock
。我说的对吗?

如果我理解正确,那是关于()。那么您的假设是正确的:是的,在进程上下文中使用
旋转锁
和在计时器处理程序中使用
旋转锁
计时器列表的
函数
)。但是,只有当锁(以及相应的数据结构)仅在所提到的上下文中使用时,这才是正确的。如果是这样,您需要例如
spin\u lock\u irq

还请记住,您不应该在
spin\u lock*
-
spin\u unlock*
中使用可睡眠功能

Linux内核源代码中有很多示例,例如:

  • 在定时器+进程上下文中
  • 在中断处理程序和计时器中