博客首页 | 排行榜 |

马建辉

本处存档文章除非已声明引用,余者皆为原创。欢迎转载,注明来源即可。

个人档案
博文分类
关于内核链表合并的问题  2010-03-24 14:53

链表是linux内核的一个基本数据结构,针对该结构以宏定义形式定义了一些操作接口,包括添加、删除、合并,搞不懂的是这个合并函数,

 

static inline void list_splice(struct list_head *list, struct
list_head *head);
按照IBM深入分析linux内核链表这一节,
 

“假设当前有两个链表,表头分别是list1和list2(都是struct list_head变量),当调用list_splice(&list1,&list2)时,只要list1非空,list1链表的内容将被挂接在list2链表上,位于list2和list2.next(原list2表的第一个节点)之间。新list2链表将以原list1表的第一个节点为首节点,而尾节点不变。如图(虚箭头为next指针):”


图 链表合并list_splice(&list1,&list2)
 
按照linux内核中的代码:

static inline void __list_splice(struct list_head *list,
     struct list_head *head)
{
 struct list_head *first = list->next;
 struct list_head *last = list->prev;
 struct list_head *at = head->next;

 first->prev = head;
 head->next = first;

 last->next = at;
 at->prev = last;
}

上图list1就是函数中的list,list2就是函数中的head,这个图示和函数我始终搞不明白,哪个高手帮忙解释一下?

类别:嵌入式 |
上一篇:大灯随动转向控制系统 | 下一篇:看电脑眼睛不酸不胀的好方法(转贴)
以下网友评论只代表其个人观点,不代表本网站的观点或立场