-2

我正在阅读 tasklet 的源代码并尝试理解它。

我认为 tasklet_head 的数据结构是有线的,你是这样认为的。为什么第二个元素的数据类型是 struct tasklet_struct ** ,它只会让源代码更复杂,让人困惑,writh?我的意思是,为什么作者不使用 struct tasklet_struct *tail?也许作者太聪明了,我无法理解这种简单。如果是真的,如果你理解的话,请你给点提示。

398 /*
399  * Tasklets
400  */
401 struct tasklet_head
402 {
403         struct tasklet_struct *head;
404         struct tasklet_struct **tail;
405 };

完整的源代码可以在这里找到。

4

1 回答 1

0

我将回答手头的编程问题。

当然 *tail 和 **tail 是完全不同的东西,这就是为什么它是 **tail 而不是 *tail。

您将持有某种尾引用以避免遍历整个链表以在末尾添加一些东西(对于 O(1) 追加而不是 O(n))。Tail 可以设置为特定的实例,但这种特定的实施策略是有原因的。而是指向下一个字段,它很简单:

new_item->next = NULL;
*tail = new_item;
tail = &(new_item->next);

希望这可以帮助。

于 2012-11-30T10:34:55.180 回答