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

Machカーネルにあります。具体的には、/ hurd / gnumach / kern/syscall_subr.cを参照してください。GNU Cライブラリは、Linux以外の非常に多くのオペレーティングシステムカーネルをサポートしており、おそらくこれはOS固有のソースファイルの1つにあります。

于 2012-08-25T06:52:47.157 に答える
1

Googleですばやく検索すると、Machシステムトラップ(システムコール)であることがわかります。したがって、関数の実装は、カーネルにトラップするだけの短いアセンブリスタブである可能性があります。実際の実装はカーネルコードになります。

http://www.gnu.org/software/hurd/gnumach-doc/Hand_002dOff-Scheduling.htmlから:

—関数:boolean_t swtch()

システムトラップスイッチは、現在のスレッドをプロセッサからオフに切り替えようとします。戻り値は、現在のスレッドより多くがプロセッサセットで実行されているかどうかを示します。これは、ロック管理ルーチンに役立ちます。

プロセッサが実行できる有用なものは他にないため、スレッドがスピンを継続することによってリソースを占有することが正当化される場合、呼び出しはFALSEを返します。スレッドがロックをもう一度チェックして、善良な市民になり、実際に一時停止する必要がある場合は、TRUEが返されます。

—関数:boolean_t swtch_pri(int priority)

システムトラップswtch_priは、swtchと同様に現在のスレッドをプロセッサからオフに切り替えようとしますが、その間、スレッドの優先度を可能な最小値に下げます。現在、優先度は使用されていません。

戻り値はswtchと同じです。

于 2012-08-25T06:36:16.597 に答える