1

在哪里可以找到函数 __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);
4

2 回答 2

4

它在马赫内核中。具体来说,请参见/hurd/gnumach/kern/syscall_subr.c。GNU C 库支持除了 Linux 之外的许多操作系统内核,您可能已经在一个特定于操作系统的源文件中找到了它。

于 2012-08-25T06:52:47.157 回答
1

快速谷歌搜索表明这是一个马赫系统陷阱(系统调用)。因此,函数实现很可能是一个简短的汇编存根,它只是陷入内核;真正的实现将在内核代码中。

来自http://www.gnu.org/software/hurd/gnumach-doc/Hand_002dOff-Scheduling.html

— 函数:boolean_t swtch()

系统陷阱 swtch 尝试将当前线程关闭处理器。返回值指示处理器集中是否有超过当前线程正在运行。这对于锁管理例程很有用。

如果线程有理由通过继续旋转而成为资源占用者,则该调用返回 FALSE,因为处理器无法做任何其他有用的事情。如果线程应该对锁再做一次检查,然后成为一个好公民并真正挂起,则返回 TRUE。

— 功能:boolean_t swtch_pri(int 优先级)

系统陷阱 swtch_pri 尝试像 swtch 一样将当前线程关闭处理器,但在此期间将线程的优先级降低到可能的最小值。目前没有使用优先级。

返回值与 swtch 相同。

于 2012-08-25T06:36:16.597 回答