今天研究的最后一段代码了,在kernel/sched.c中多次出现的for_each_cpu_mask()
是个宏文件,定义如下:
#if NR_CPUS > 1
#define for_each_cpu_mask(cpu, mask) \
for ((cpu) = first_cpu(mask); \
(cpu) < NR_CPUS; \
(cpu) = next_cpu((cpu), (mask)))
#else /* NR_CPUS == 1 */
#define for_each_cpu_mask(cpu, mask) \
for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask)
#endif /* NR_CPUS */
|
通过代码可以看到,该宏是对每一个CPU进行遍历。通过对NR_CPU(NR_CPU
记录物理CPU中的逻辑CPU的数目)的值来使用不同的循环方式。作为一个宏,在编译的时候能根据实际的情况来自动寻找合适的循环条件,对CPU进行遍历。
阅读(3200) | 评论(0) | 转发(0) |