上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.2.3 tasklet
tasklet是可以被调度执行的特殊函数,在系统某个特定的安全时间运行在软件中断的执行现场。tasklet的特点是:
● 由函数tasklet_schedule调度执行,一个tasklet只运行一次。
static inline void tasklet_schedule(struct tasklet_struct *t)
● 一个tasklet一次只能在一个CPU上执行。
● 不同的tasklet可以同时在不同的CPU上运行。
实现tasklet的过程可分为以下几个步骤完成:
① 编写tasklet的处理函数,如func。
② 用宏declare tasklet (name,func,data)声明一个新的tasklet,name为该tasklet的名称,func为该tasklet要执行的函数,data是传送给tasklet处理函数的数据。
③ 用tasklet_schedule调度tasklet执行。
除此以外,函数tasklet_disable和tasklet_enable可以分别用于禁止和允许tasklet的运行。下面给出一个简单的例子来了解tasklet的实现。
void my_func(unsigned long); /*tasklet的处理函数*/ char tasklet_data[] = "This is a new tasklet"; /*tasklet处理程序需要的数据*/ DECLARE_TASKLET(my_tasklet, my_func, (unsigned long) &tasklet_data); /* 声明tasklet */ void my_func(unsigned long data) /*实现tasklet函数*/ { /* 完成函数体*/ } … /*调度新定义的tasklet */ tasklet_schedule(&my_tasklet);