スケジューリングポリシーを設定するには、pthread_attr_setschedpolicy(3C) を使用します。POSIX 規格ではスケジューリングポリシーの値として、SCHED_FIFO (先入れ先出し)、SCHED_RR (ラウンドロビン)、SCHED_OTHER (実装で定義) を規定しています。Solaris OS の場合、SCHED_OTHER スレッドは、従来のタイムシェアリング (TS) スケジューリングクラスで実行されます。
int pthread_attr_setschedpolicy(pthread_attr_t *tattr, int policy);
#include <pthread.h> pthread_attr_t tattr; int policy; int ret; /* set the scheduling policy to SCHED_OTHER */ ret = pthread_attr_setschedpolicy(&tattr, SCHED_OTHER);
SCHED_FIFO
先入れ先出しスレッドはリアルタイム (RT) スケジューリングクラスで実行され、呼び出しプロセスは特権付きである必要があります。このようなスレッドは、優先順位のより高いスレッドに割り込まれなければ、CPU を譲るかブロックされるまで実行を続けます。
SCHED_RR
ラウンドロビン。スケジューリングの競合範囲がシステムであるスレッド (PTHREAD_SCOPE_SYSTEM ) は、呼び出しプロセスの実効ユーザー ID が 0 であれば、リアルタイム (RT) スケジューリングクラスに設定されます。これらのスレッドは、優先順位のより高いスレッドに割り込まれなければ、または CPU を譲るかブロックされなければ、システムに定義された期間実行を続けます。スケジューリング競合範囲がプロセススコープ (PTHREAD_SCOPE_PROCESS) のスレッドには、SCHED_RR を使用します。これは、TS スケジューリングクラスに基づいています。また、これらのスレッドの呼び出しプロセスは、実効ユーザー ID が 0 以外です。
ラウンドロビンスレッドはリアルタイム (RT) スケジューリングクラスで実行され、呼び出しプロセスは特権付きである必要があります。ラウンドロビンスレッドは、優先順位のより高いスレッドに割り込まれなければ、または CPU を譲るかブロックされなければ、システムに定義された期間実行を続けます。その時点で、優先順位の等しい別のリアルタイムスレッドに強制的に CPU が譲られます。
SCHED_FIFO と SCHED_RR は POSIX 標準では任意とされており、リアルタイムスレッドについてのみサポートされています。
スケジューリングの詳細については、「スレッドのスケジューリング」を参照してください。
pthread_attr_setschedpolicy() は、正常終了時に 0 を返します。それ以外の戻り値は、エラーが発生したことを示します。以下の条件が検出されると、この関数は失敗し、次の値を戻します。
EINVAL
説明:tattr に設定しようとした値は無効です。
ENOTSUP
説明:サポートされていない属性値を設定しようとしました。