Linux调度程序分叉操作使用两个函数sched_fork()
和__sched_fork()
。 __sched_fork()
被__sched_fork()
调用。 在内核的其他几个地方使用具有双下划线(专用于系统保留名称)的类似代码约定。 当一个函数可以被使用时,如何定义这样的两个函数会有所帮助? 为什么使用这个惯例?
如果您搜索源代码,您将看到__sched_fork()
从init_idle()
和__sched_fork()
中调用。 我认为这是定义两个函数的主要原因。
我也看到了具有不同实现的函数对(有和没有__
)。 例如, __hrtick_start()
和hrtick_start()
。 但是,它们的用法稍有不同:第一个应该从hardirqs中调用。
当下划线的版本做功能的核心工作,没有下划线的版本在调用它之前做额外的测试时,其他对可以分开。 这样,如果所有的条件都被检查过了,程序员可以调用下划线的版本。
历史上,模式是使__function成为执行操作的“胆量”的函数,具有绝对最小的参数检查。 另一方面,no___函数将对参数有效性或其他一些额外的成本操作进行一些检查。 然而,有时候,这只是一个分为“中间”和“其余”的模块化。