我正在阅读tasklet的源代码并尝试理解它。
我认为tasklet_head的数据结构是有线的,你是否这么认为。 为什么第二个元素的数据类型是struct tasklet_struct **,它只是使源代码更复杂并且让人迷惑,呢? 我的意思是,作者为什么不使用struct tasklet_struct * tail? 也许作者是如此聪明,以至于我无法理解这种简单性。 如果这是真的,如果你理解它,你能否请一些提示。
398 /*
399 * Tasklets
400 */
401 struct tasklet_head
402 {
403 struct tasklet_struct *head;
404 struct tasklet_struct **tail;
405 };
可以找到完整的源代码here.
答案 0 :(得分:0)
我会回答手头的编程问题。
当然*尾巴和**尾巴是完全不同的东西,这就是为什么它是**尾巴而不是*尾巴。
你将持有某种尾部引用以避免遍历整个链表以在末尾添加一些东西(对于O(1)追加而不是O(n))。尾部可能已设置为特定实例,但这种特定实施策略将有一个原因。而是指向下一个字段,它就像:
一样简单new_item->next = NULL;
*tail = new_item;
tail = &(new_item->next);
希望这有帮助。