• Linux内核实践之tasklet机制【转】


    作者:bullbat

           源代码分析与原理部分参见前面的文章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);

    运行结果:

  • 相关阅读:
    [译]The Python Tutorial#4. More Control Flow Tools
    Python基础-函数参数
    Python进阶-继承中的MRO与super
    Python基础-类
    [译]The Python Tutorial#6. Modules
    Python基础-包与模块
    Python基础-类变量和实例变量
    Python进阶
    iphonex适配
    web前端安全
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/5665749.html
Copyright © 2020-2023  润新知