在Linux内核链表中,不是在链表结构中包含数据,而是在数据结构中包含链表节点.

在Linux内核链表中,不是在链表结构中包含数据,而是在数据结构中包含链表节点.,第1张

简单来说,就是这个结构体有很多成员变量,其中有一个成员变量是链表指针结构。

示例如下:

typedef struct _aaa {

    int val

    struct _aaa* next

} LISTNODE

typedef struct _kernel {

    int a

    char b[32]

    LISTNODE p

} KERNEL_LIST

*** 作系统内核, 如同其他程序, 常常需要维护数据结构的列表. 有时, Linux 内核已经同时有几个列表实现. 为减少复制代码的数量, 内核开发者已经创建了一个标准环形的, 双链表鼓励需要 *** 作列表的人使用这个设施.

当使用链表接口时, 你应当一直记住列表函数不做加锁. 如果你的驱动可能试图对同一个列表并发 *** 作, 你有责任实现一个加锁方案. 可选项( 破坏的列表结构, 数据丢失, 内核崩溃) 肯定是难以诊断的.

为使用列表机制, 你的驱动必须包含文件 <linux/list.h>. 这个文件定义了一个简单的类型 list_head 结构:

struct list_head { struct list_head *next, *prev}

真实代码中使用的链表几乎是不变地由几个结构类型组成, 每一个描述一个链表中的入口项. 为在你的代码中使用 Linux 列表, 你只需要嵌入一个 list_head 在构成这个链表的结构里面. 假设, 如果你的驱动维护一个列表, 它的声明可能看起来象这样:

单链表

双链表

循环链表

详细请看 深入分析 Linux 内核链表

http://www.ibm.com/developerworks/cn/linux/kernel/l-chain/


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8511524.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-17
下一篇 2023-04-17

发表评论

登录后才能评论

评论列表(0条)

保存