pthread_attr_setschedparam(3T) は、スケジューリングパラメタを設定します。
スケジューリングパラメタは param 構造体で定義します。ただし、サポートされるのは優先順位だけです。新たに生成されるスレッドは、この方針で動作します。
SCHED_FIFO
先入れ先出し。この方針でスケジュールしたスレッドは、優先順位の高いスレッドに割り込まれなければ、完了まで処理を進行します。スケジューリング競合範囲であるスレッド (PTHREAD_SCOPE_SYSTEM) は、リアルタイム (RT) スケジューリングクラスに属し、呼び出しプロセスの実効ユーザ ID は 0 でなければなりません。スケジューリング競合範囲がプロセス (PTHREAD_SCOPE_PROCESS) であるスレッド は、TS スケジューリングクラスに属します。
SCHED_RR
ラウンドロビン。この方針でスケジュールしたスレッドは、優先順位の高いスレッドに割り込まなければ、システムによって定められた期間、処理を実行します。スケジューリング競合範囲がシステムであるスレッド (PTHREAD_SCOPE_SYSTEM) は、リアルタイム (RT) スケジューリングクラスに属し、呼び出しプロセスの実効ユーザ ID は 0 でなければなりません。スケジューリング競合範囲がプロセス (PTHREAD_SCOPE_PROCESS) であるスレッドの SCHED_RR は、TS スケジューリングクラスに属します。
プロトタイプ: int pthread_attr_setschedparam(pthread_attr_t *tattr, const struct sched_param *param); #include <pthread.h> pthread_attr_t tattr; int newprio; sched_param param; newprio = 30; /* 優先順位を設定する。それ以外は変更なし */ param.sched_priority = newprio; /* 新しいスケジューリングパラメタを設定する */ ret = pthread_attr_setschedparam (&tattr, ¶m); |
正常終了時は 0 です。それ以外の戻り値は、エラーが発生したことを示します。以下の条件が検出されると、この関数は失敗し、対応する値を返します。
pthread の優先順位は、子スレッドを生成する前に優先順位属性を設定するか、親スレッドの優先順位を変更してまた戻す、のいずれかの方法で管理できます。