【发布时间】:2014-08-10 12:24:48
【问题描述】:
Linux 调度程序分叉操作使用两个函数sched_fork() 和__sched_fork()。 __sched_fork() 由 sched_fork() 调用。类似的带有双下划线的代码约定(专门用于系统保留名称)在内核的其他几个地方使用。当一个函数可以使用时,定义这样的两个函数有什么帮助?为什么要使用这种约定?
【问题讨论】:
标签: linux linux-kernel
Linux 调度程序分叉操作使用两个函数sched_fork() 和__sched_fork()。 __sched_fork() 由 sched_fork() 调用。类似的带有双下划线的代码约定(专门用于系统保留名称)在内核的其他几个地方使用。当一个函数可以使用时,定义这样的两个函数有什么帮助?为什么要使用这种约定?
【问题讨论】:
标签: linux linux-kernel
从历史上看,该模式是让 __function 成为执行操作的“胆量”的函数,并具有绝对最少的参数检查。另一方面,no-__ 函数将对参数有效性或其他一些额外成本操作进行一些检查。然而,有时,它只是一个模块化,分为“最中间”和“其余部分”。
【讨论】:
如果您搜索源,您会看到 __sched_fork() 是从 init_idle() 和 sched_fork() 调用的。我认为这是定义两个函数的主要原因。
我还看到了具有不同实现的成对函数(有和没有__)。例如,__hrtick_start() 和 hrtick_start()。但是,它们的用法略有不同:第一个应该从 hardirqs 调用。
当带有下划线的版本完成功能的核心工作并且不带下划线的版本在调用它之前进行额外测试时,其他对可能会分开。这样,如果所有条件都已检查,程序员可以调用下划线版本。
【讨论】: