千家信息网

linux内核中list链表的源码分析

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章将为大家详细讲解有关linux内核中list链表的源码分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。linux kernel里的很多数据结
千家信息网最后更新 2026年10月31日linux内核中list链表的源码分析

这篇文章将为大家详细讲解有关linux内核中list链表的源码分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。


linux kernel里的很多数据结构都很经典, list链表就是其中之一,小编将从以下几方面介绍list链表:list的定义、list提供的操作方法、注意事项、使用实例。

前言

linux kernel里的很多数据结构都很经典, list链表就是其中之一

list链表


1 List 所在文件

List的所有操作可以在 include/linux/list.h找到;

List head的定义可以在 include/linux/types.h找到;


2 定义

实际上这就是一个双向循环链表, 且有一个头指针


list head的定义:

这个定义中只有前向和后向指针,没任何的数据部分, 那我们基本上就知道了, 它不是被单独使用的,而是把它嵌入到用户定义的struct中, 将用户定义的数据结构串起来,作成list;


思想很巧妙, 对用户定义的数据结构侵入性很小, 实现了c++中std::List模板的功能;


虽然这个定义是叫head, 但其实嵌入到用户定义的数据结构中的也是这个.


3 list提供的操作方法

初始化

插入操作

将一个元素插入到两个元素之间, 即将 new插入到prev和next中, 这个函数是下面在头部和尾部插入的实现基础


在头部插入, 在头指针和第一个元素间插入


在尾部插入,在最后一个元素间和头指针间插入, 因为是循环链表嘛~

删除操作

删除两个元素之间的元素


删除一个已知元素entry

替换操作

都是指针的变换

移动操作

将一个元素移动到另一个list的头部


将一个元素移动到另一个list的队尾


拆分操作

将一个队列由指定的位置拆成两个队列


list是新队列的head指针, 包括的元素从原head队列的第一个元素到entry, head队列仅包括余下的元素


合并操作

将list列表中除了list本身插入到prev和next之间


将一个列表插入到另一个列表的头部


将一个列表插入到另一个列表的尾部

list_entry宏

按之前说的, 这个list_head都有要嵌入到用户定义的struct中,这个宏就是由这个list_head ptr来获取当前所处的struct对象的指针, 用了linux的经典宏定义 container_of

一堆宏定义, 用来各种遍历, 获取entry


4 注意事项

只说一个,就是多线程操作同一个list, 还是需要加锁


5 使用实例

关于linux内核中list链表的源码分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

元素 指针 数据 数据结构 用户 结构 队列 头部 就是 两个 之间 尾部 经典 移动 内核 源码 分析 事项 内容 实例 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技互联网 新华互联网科技 华服互联网科技怎么样 厦门中拓互联网络科技有限公司 互联网扶贫科技 齐家互联网科技有限公司 互联网科技生活的内容 互联网科技热点资讯 互联网科技项目计划书材料类 互联网媒体平台算高科技产业 广州新华互联网科技学校电竞方面 互联网科技的全部知识 四川慕妮娅互联网科技有限公司 广州梦谷互联网科技有限公司领导 张家口科技产业互联网平台 互联网科技职业技能培训学校 上海互联网科技园景观 承德科技产业互联网平台 北京瑞云互联网科技有限公司 互联网科技创新方面的资料 广州紫鲸互联网科技有限公司 互联网科技公司的优势 科技企业和互联网企业 互联网汽车科技小镇 济南华为互联网科技产业总部基地 重庆威客帮互联网科技 乌苏新华互联网科技做什么的 晋城互联网科技 唐山双旺合互联网科技产业园 小牛互联网科技有限公司地址
0