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 の優先順位は、子スレッドを生成する前に優先順位属性を設定するか、親スレッドの優先順位を変更してまた戻す、のいずれかの方法で管理できます。