首页 > 解决方案 > 哈希表函数 hlist_add_before 在 Linxu 内核中的实现

问题描述

哈希列表函数 hlist_add_before 在 linux 内核中的实现如下:

struct hlist_node {
    struct hlist_node *next, **pprev;
};

/*
 * This function is to add n before next
 */

static inline void hlist_add_before(struct hlist_node *n, struct hlist_node *next)
{
    n->pprev = next->pprev;
    n->next = next;
    next->pprev = &n->next;
    *(n->pprev) = n;
}

*(n->pprev) = n对函数的最后一行感到困惑。我认为只有前三行就足够了。怎么会有最后一行!!

标签: hashlinux-kernel

解决方案


我终于明白了。它只是将最后一块拼图放在它的位置。在这个哈希列表函数中,它必须处理三角形关系。第一,切断原来的粘合,第二,在中间插入新的。第三,建立新人与之前和之后的人之间的联系。 *(n->pprev)是指向下一个节点的指针。之前,它是下一个节点,但现在它是 n。前两行用于节点“n”。第三行是节点“下一个”。第四行是 n 前面的节点。有四行将整个列表连接在一起。


推荐阅读