在哪里可以找到函数__swtch_pri的实现代码?
void
__spin_lock_solid (spin_lock_t *lock)
{
while (__spin_lock_locked (lock) || ! __spin_try_lock (lock))
/* Yield to another thread (system call). */
__swtch_pri (0);
}
只在glibc中找到声明,见下文。
/* Attempt to context switch the current thread off the processor. Lower
the thread's priority as much as possible. The thread's priority will
be restored when it runs again. PRIORITY is currently unused. Return
true if there are other threads that can be run and false if not. */
extern boolean_t swtch_pri (int priority);
extern boolean_t __swtch_pri (int priority);
答案 0 :(得分:4)
它在Mach内核中。具体来说,请参阅/hurd/gnumach/kern/syscall_subr.c。 GNU C库支持除Linux之外的许多操作系统内核,您可能已经在一个特定于操作系统的源文件中找到了它。
答案 1 :(得分:1)
Google快速搜索表明它是一个Mach系统陷阱(系统调用)。因此,函数实现可能是一个短的汇编存根,只是陷入内核;真正的实现将在内核代码中。
来自http://www.gnu.org/software/hurd/gnumach-doc/Hand_002dOff-Scheduling.html:
- 功能:boolean_t swtch()
系统陷阱swtch尝试将当前线程切换出处理器。返回值指示当前线程是否在处理器集中运行。这对锁管理例程很有用。
如果线程通过继续旋转而成为资源占用,则调用返回FALSE,因为处理器没有其他任何有用的功能。如果线程应该再次检查锁定然后成为一个好公民并且真正暂停,则返回TRUE。
- 功能:boolean_t swtch_pri(int priority)
系统陷阱swtch_pri尝试将当前线程切换为处理器,如同swtch一样,但在此期间将线程的优先级降低到最小可能值。目前没有使用优先权。
返回值与swtch相同。