Linux 内核源码:list 链表

栏目: 数据库 · 发布时间: 8年前

内容简介:HULK一线技术杂谈由360云平台团队打造的技术分享公众号,内容涉及

女主宣言

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

PS:丰富的一线技术、多元化的表现形式,尽在“ HULK一线技术杂谈 ”,点关注哦!

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

本篇要介绍的内容:

  1. list的定义

  2. list提供的操作方法

  3. 注意事项

  4. 使用实例

list链表

1

List 所在文件

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

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

2

定义

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

list head的定义:

Linux 内核源码:list 链表

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

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

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

3

list提供的操作方法

初始化

Linux 内核源码:list 链表

插入操作

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

Linux 内核源码:list 链表

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

Linux 内核源码:list 链表

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

Linux 内核源码:list 链表

删除操作

删除两个元素之间的元素

Linux 内核源码:list 链表

删除一个已知元素entry

Linux 内核源码:list 链表

替换操作

都是指针的变换

Linux 内核源码:list 链表

移动操作

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

Linux 内核源码:list 链表

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

Linux 内核源码:list 链表

拆分操作

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

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

Linux 内核源码:list 链表

合并操作

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

Linux 内核源码:list 链表

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

Linux 内核源码:list 链表

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

Linux 内核源码:list 链表

list_entry宏

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

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

4

注意事项

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

5

使用实例

Linux 内核源码:list 链表

HULK一线技术杂谈

由360云平台团队打造的技术分享公众号,内容涉及 云计算 、 数据库 、 大数据 、 监控 、 泛前端 、 自动化测试 等众多技术领域,通过夯实的技术积累和丰富的一线实战经验,为你带来最有料的技术分享

Linux 内核源码:list 链表

以上所述就是小编给大家介绍的《Linux 内核源码:list 链表》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

哥德尔、艾舍尔、巴赫

哥德尔、艾舍尔、巴赫

[美] 侯世达 / 严勇、刘皓明、莫大伟 / 商务印书馆 / 1997-5 / 88.00元

集异璧-GEB,是数学家哥德尔、版画家艾舍尔、音乐家巴赫三个名字的前缀。《哥德尔、艾舍尔、巴赫书:集异璧之大成》是在英语世界中有极高评价的科普著作,曾获得普利策文学奖。它通过对哥德尔的数理逻辑,艾舍尔的版画和巴赫的音乐三者的综合阐述,引人入胜地介绍了数理逻辑学、可计算理论、人工智能学、语言学、遗传学、音乐、绘画的理论等方面,构思精巧、含义深刻、视野广阔、富于哲学韵味。 中译本前后费时十余年,......一起来看看 《哥德尔、艾舍尔、巴赫》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

html转js在线工具
html转js在线工具

html转js在线工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试