歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux內核 >> Linux內核實踐之tasklet機制

Linux內核實踐之tasklet機制

日期:2017/3/1 10:25:18   编辑:Linux內核

源代碼分析與原理部分參見前面的文章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!\n");

}

/*用靜態方式聲明並定義一個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);

運行結果:

Copyright © Linux教程網 All Rights Reserved