SCHED_YIELD(2)

名前
sched_yield - プロセッサーを空け渡す(yield)

書式
#include <sched.h>

int sched_yield(void);

説明
sched_yield() を呼び出すことで、呼び出したスレッドが CPU の使用権を手放すことができる。 そのスレッドは、そのスレッドの静的プライオリティのキューの末尾に 移動し、新しいスレッドが走り始める。

返り値
成功した場合は sched_yield() は 0 を返す。 エラーの場合は -1 が返され、 errno が適切に設定される。

エラー
Linux の実装では、 sched_yield() は常に成功する。

準拠
 POSIX.1-2001, POSIX.1-2008.

注意
sched_yield() を呼び出した時点で最大優先度のリストの中に呼び出し元のスレッドしか 存在しなければ、そのスレッドは呼び出し後も走り続けることになる。

POSIX システムで sched_yield() は <unistd.h> に _POSIX_PRIORITY_SCHEDULING が定義されている場合にのみ使用可能である。

sched_yield() を戦略的に呼び出すことで、(極度に) 競合するリソース (mutex など) を呼び出し元が解放した際に他のスレッドやプロセスに実行機会を与えることで、 性能を上げることができる。 sched_yield() を必要もないのに呼び出したり、不適切な場面 (例えば、他のスケジューリング 対象となるスレッドが必要とするリソースを呼び出し元が保持したままの状態) で呼び出したりするのは避けること。なぜなら、 sched_yield() の呼び出しより不必要なコンテキストスイッチが起こり、システム性能が 劣化する結果になるからである。

sched_yield() is intended for use with real-time scheduling policies (i.e., SCHED_FIFO or SCHED_RR). Use of sched_yield() with nondeterministic scheduling policies such as SCHED_OTHER is unspecified and very likely means your application design is broken.

関連項目
sched(7)

この文書について
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。