0

私は Linux カーネル 2.4 をいじっていて、sched.c の関数 schedule() はマクロ prepare_arch_schedule を使用していますが、これは非常に奇妙に見えます。それは何ですか?

関連するセクションは次のとおりです

#ifndef prepare_arch_schedule
# define prepare_arch_schedule(prev)    do { } while(0)
# define finish_arch_schedule(prev) do { } while(0)
# define prepare_arch_switch(rq)    do { } while(0)
# define finish_arch_switch(rq)     spin_unlock_irq(&(rq)->lock)
#endif
4

1 に答える 1

1

なぜそれが無限ループだと思うのか、私はまだ理解していません:)。

これは空のステートメントの「ハック」であり、その理由は、コンパイラが空のステートメントにヒットしたときに文句を言う可能性があるためです。

私の理解では、コンテキストスイッチのロックはアーキテクチャに依存するため、ロックが定義されていないアーキテクチャの場合、この空のステートメントが定義されているため、アーキテクチャごとにschedule()を変更する必要はありません。したがって、#ifndef .. ..

于 2010-05-05T15:27:45.837 に答える