这篇文章将为大家详细讲解有关linux内核中list链表的源码分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
linux kernel开发云主机域名里的很多数据结构都很经典, list链表就是其中之一,小编将从以下几方面介绍list链表:list的定义、list提供的操作方法、注意事项、使用实例。
前言
linux kernel里的很多数据结构都很经典, li开发云主机域名st链表就是其中之一list链表
1 List 所在文件List的所有操作可以在include/linux/list.h找到;List head的定义可以在include/linux/types.h找开发云主机域名到;
2 定义
实际上这就是一个双向循环链表, 且有一个头指针
list head的定义:这个定义中只活动:慈云数据爆款香港服务器,CTG+CN2高速带宽、快速稳定、平均延迟10+ms 速度快,免备案,每月仅需19元!! 点击查看有前向和后向指针,没任何的数据部分, 那我们基本上就知道了, 它不是被单独使用的,而是把它嵌入到用户定义的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链表的源码分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
本文从转载,原作者保留一切权利,若侵权请联系删除。
《linux内核中list链表的源码分析》来自互联网同行内容,若有侵权,请联系我们删除!
还没有评论,来说两句吧...