【问题标题】:What is the for_each_sched_entity macro doing?for_each_sched_entity 宏在做什么?
【发布时间】:2021-12-30 07:18:06
【问题描述】:
#define for_each_sched_rt_entity(rt_se) \
    for (; rt_se; rt_se = NULL)

我不熟悉这个 for 循环实际上在做什么。谁能解释一下?

https://elixir.bootlin.com/linux/v5.10.75/source/kernel/sched/rt.c#L621

【问题讨论】:

  • I'm not familiar with what this for loop is actually doing. 我不明白,这是一个基本的 for 循环,什么都没有。你可以再详细一点吗?你不清楚哪一部分?请注意,您正在查看 RT_GROUP_SCHED disabled 的实现。
  • 它遍历 1 个元素的结构。第 516 行的替代定义遍历多个父元素。
  • @stark 只是通过 rt_se 吗? rt_se 有很多指针,例如 parent、child、back 等。它使用的是哪一个?
  • 此宏的替代定义使用父级。

标签: linux linux-kernel scheduled-tasks scheduler scheduling


【解决方案1】:

该宏在执行了后面的指令块后将 rt_se 设置为 NULL。 在内核中使用这种“访问”宏是很常见的,以使代码更加清晰和健壮。

【讨论】:

  • 但是遍历的是什么? rt_se 定义了很多指针,child、parent、back 等。它使用哪一个?
  • 它只是表示 rt_se 当前指向的结构将在以下指令块中被加入,然后不再被加入(rt_se 设置为 NULL)。使用这样的宏,类似于那些遍历列表的宏,也使代码更加同质(访问一个元素或遍历一个列表,代码遵循相同的规则)。
猜你喜欢
  • 1970-01-01
  • 2022-07-21
  • 2012-03-07
  • 2014-01-22
  • 1970-01-01
  • 2012-05-01
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多