walk_tg_tree_from的图解

简介: walk_tg_tree_from的图解

在遍历task_group的时候,需要会调用到walk_tg_tree_from函数,从函数注释看,这个函数的流程是:

from为根节点,当进入一个节点时调用down回调函数,当离开一个节点时调用up函数。这个函数

采用的是深度遍历。

下面用一张图来说明:

/*
 * Iterate task_group tree rooted at *from, calling @down when first entering a
 * node and @up when leaving it for the final time.
 *
 * Caller must hold rcu_lock or sufficient equivalent.
 */
int walk_tg_tree_from(struct task_group *from,
           tg_visitor down, tg_visitor up, void *data)
{
  struct task_group *parent, *child;
  int ret;
  parent = from;
down:
  ret = (*down)(parent, data);
  if (ret)
    goto out;
  list_for_each_entry_rcu(child, &parent->children, siblings) {
    parent = child;
    goto down;
up:
    continue;
  }
  ret = (*up)(parent, data);
  if (ret || parent == from)
    goto out;
  child = parent;
  parent = parent->parent;
  if (parent)
    goto up;
out:
  return ret;
}
相关文章
|
6月前
|
缓存 索引
图解B Tree和B+ Tree
图解B Tree和B+ Tree
65 0
|
2月前
|
Shell
9-9|tree如何实现ll的效果
9-9|tree如何实现ll的效果
Leetcode 623. Add One Row to Tree
题目很简单,在树的第d层加一层,值为v。递归增加一层就好了。代码如下
46 0
LeetCode 429. N-ary Tree Level Order Traversal
给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。
84 0
LeetCode 429. N-ary Tree Level Order Traversal
LeetCode 222. Count Complete Tree Nodes
给出一个完全二叉树,求出该树的节点个数。
86 0
LeetCode 222. Count Complete Tree Nodes
|
算法 容器
常用查找算法 find() find_if() adjacent_find() binary_search() count() count_if()
常用查找算法 find() find_if() adjacent_find() binary_search() count() count_if()
|
算法 JavaScript Java
并查集算法 - Algorithms, Part I, week 1 UNION-FIND
cousera 普林斯顿大学 算法公开课 第一周 并查集数据类型内容整理
1505 0