Linux 内核源码:list 链表

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

内容简介: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 链表》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Ajax for Web Application Developers

Ajax for Web Application Developers

Kris Hadlock / Sams / 2006-10-30 / GBP 32.99

Book Description Reusable components and patterns for Ajax-driven applications Ajax is one of the latest and greatest ways to improve users’ online experience and create new and innovative web f......一起来看看 《Ajax for Web Application Developers》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具