threaded_irq两次调用同步问题及全局变量访问同步必要性咨询
关于Linux驱动中threaded_irq访问全局变量的同步问题
核心结论
如果全局变量仅由该threaded_irq对应的内核线程访问,不需要额外的同步机制。
关键细节解释
- threaded_irq的线程模型:每个注册的threaded_irq会绑定一个专属内核线程,中断触发多次时,不会创建多个线程,而是把多次中断的处理请求排队,由同一个线程依次执行——不会出现两个线程同时读写该全局变量的情况。
- 中断屏蔽的作用边界:硬中断处理阶段(threaded_irq的顶半部)确实会屏蔽对应中断线,但threaded_irq的底半部(进程上下文线程)运行时,中断线可能已被打开。不过所有中断请求都会被提交到同一个线程的工作队列,线程本身是串行执行的,同一时刻只有该线程在操作变量。
- 可重入性的误区:虽然threaded_irq运行在进程上下文,不像硬中断那样自动屏蔽中断保证不可重入,但由于其线程串行处理的特性,只要变量仅被这个线程访问,就不会出现并发读写场景,自然不需要自旋锁、互斥体这类同步手段。
内容的提问来源于stack exchange,提问作者ldd3
相关产品推荐
相关产品推荐

