千家信息网

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

发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,这篇文章将为大家详细讲解有关linux内核中list链表的源码分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。linux kernel里的很多数据结
千家信息网最后更新 2024年11月23日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安全错误 数据库的锁怎样保障安全 提高服务器安全性的方案 手动连接服务器dns 剑灵有哪些国家的服务器 蓟州区媒体网络技术答疑解惑 游戏公司的服务器怎么样 网络技术学思科好还是华为好 查看数据库自动扩展大小 全国大学生网络安全精英赛题库 互联网科技公司优势怎么写 高校校园网络安全初探 网络安全统一品牌的好处 数据库与经济学关系 网易我的世界服务器永久管理 拾余网络技术有限公司 网络安全提示牌 lol有几个全球服务器 vss怎么看数据库路径 战地1被踢出服务器了还能进吗 温州市医保药品数据库 ucsc数据库怎么查dna序列 石家庄小型企业财务软件网络技术 sqlyog保存的数据库 互联网科技公司优势怎么写 龙卷风收音机电台数据库 互联网科技汛 网络安全工程师等级 软件开发项目流程控制风险 上海企业党建软件开发公司 怎么安装2个版本数据库 进口网络技术售后服务
0