海阔天空1992 发表于 2019-06-05 13:20

看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);
}

以上函数中加粗的两行代码中,感觉第二行代码会把第一行的执行结果覆盖掉,这两行应该怎么理解呢


aweii 发表于 2021-05-03 16:37

.tail是指向链表末尾元素的next字段的地址的,所以*…….tail=t;就相当于把末尾元素的next指向t了,
然后链表末尾指向&(t->next)
页: [1]
查看完整版本: 看tasklet源码,有点不明白,还请大家多多指教