在tasklet执行ISR资源使用中使用Semaphore是否合适

时间:2014-08-24 17:39:53

标签: c linux kernel linux-device-driver kernel-module

我想在Tasklet定时器中断的下半部技术之一中使用Semaphore,但我从理论上知道tasklet不会睡眠但信号量会睡觉。对此有何解决方案?

1 个答案:

答案 0 :(得分:2)

下半部分的工作是执行任何不是由中断处理程序本身执行的中断相关工作,你希望中断处理程序尽可能少地工作(并且反过来尽可能快)并且返回ASAP到被中断的代码/过程。

Tasklets 是建立在softirq之上的下半部分机制。 工作队列是另一个用于创建内核线程以处理稍后排队的工作的接口。如果必须睡觉,请使用工作队列。否则,请使用tasklet。

在处理下半部分的同步机制时,自旋锁总是更好的选择,特别是在使用softirq或tasklet的情况下。

信号量:(仅在较旧的2.6.16内核中),作为该内核版本之后的互斥量appread。建议在进程上下文中序列化代码时使用互斥锁。