首页 / 操作系统 / Linux / Linux内核实践之tasklet机制
源代码分析与原理部分参见前面的文章linux中断延迟之tasklet,这里我们看看他的使用,和前面介绍的工作队列、等待队列等相同,声明采用两种方法,我们在init函数中直接采用tasklet_schedule(&my_tasklet);调度,内核中的实现很简单:void __tasklet_schedule(struct tasklet_struct *t){unsigned long flags;local_irq_save(flags);t->next = NULL;*__get_cpu_var(tasklet_vec).tail = t;__get_cpu_var(tasklet_vec).tail = &(t->next);raise_softirq_irqoff(TASKLET_SOFTIRQ);local_irq_restore(flags);}上面几个函数在前面的文章linux软中断中已经介绍过了,直接看使用#include <linux/init.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/interrupt.h>static void tasklet_func(unsigned long value){printk("This is tasklet function!
");}/*用静态方式声明并定义一个tasklet,动态方式一样*/DECLARE_TASKLET(my_tasklet,&tasklet_func,0);static __init int my_tasklet_init(void){/*直接调度我们的函数*/tasklet_schedule(&my_tasklet);return 0;}static void my_tasklet_exit(void){}module_init(my_tasklet_init);module_exit(my_tasklet_exit);运行结果: