pthread_setschedparam サブルーチン

目的

スレッドの 'schedpolicyと 'schedparam属性を設定する。

ライブラリー

スレッドライブラリlibpthreads.a)

構文

#include <pthread.h>
#include <sys/sched.h>

int pthread_setschedparam (thread, schedpolicy, schedparam)
pthread_t thread;
int schedpolicy;
const struct sched_param *schedparam;

説明

pthread_setschedparamサブルーチンは、スレッドの schedpolicy 属性と schedparam 属性を動的に設定する。 schedpolicy 属性は、スレッドのスケジューリング・ポリシーを指定します。 schedparam属性は、この属性オブジェクトで作成されたスレッドのスケジューリング・パラメータを指定します。 このsched_priorityフィールドには、スレッドの優先順位が格納されている これは整数値です。

対象スレッドがシステム競合スコープを持っている場合、プロセスはスケジューリング・ポリシーをSCHED_FIFOまたはSCHED_RRのいずれかに設定するルート権限を持っていなければならない。

注: pthread.hヘッダーファイルは、スレッド・ライブラリーを使用する各ソース・ファイルの最初のインクルード・ファイルでなければならない。 そうでない場合は、-D_THREAD_SAFEコンパイル・フラグを使うか、cc_rコンパイラーを使うべきである。 この場合、フラグは自動的に設定されます。

このサブルーチンは、基本オペレーティング・システム (BOS) ランタイムの一部です。 このサブルーチンの実装は、優先順位スケジューリングPOSIXオプションに依存する。 優先順位スケジューリング POSIX オプションは、オペレーティング・システムにインプリメントされています。

パラメーター

項目 説明
thread ターゲット・スレッドを指定します。
schedpolicy 設定する schedpolicy 属性を指します。 以下のいずれかの値でなければなりません。
SCHED_FIFO
先入れ先出し法スケジューリングを示します。
SCHED_RR
ラウンドロビン・スケジューリングを示します。
SCHED_OTHER
デフォルトのオペレーティング・システム・スケジューリング・ポリシーを示します。 これがデフォルト値です。 schedpolicy が SCHED_OTHER の場合、 sched_priority は 40 から 80 の範囲でなければなりません。ここで、40 は優先順位が最も低く、80 は優先順位が最も高くなります。
注: プロセス・コンテンション有効範囲および SCHED_OTHER ポリシーを持つスレッドの優先順位はカーネルによって制御されます。したがって、そのようなスレッドの優先順位を設定しても効果はありません。 ただし、システム・コンテンション有効範囲および SCHED_OTHER ポリシーを持つスレッドの優先順位は変更できます。 この変更は、基礎となるカーネル・スレッド・ナイス値に直接影響する。
schedparam 設定するスケジューリング・パラメーターが保管される場所を指します。 このsched_priorityフィールドは1から127の範囲でなければならず、1が最も優先度が低く、127が最も優先度が高い。 schedpolicy が SCHED_OTHER の場合、 sched_priority は 40 から 80 の範囲でなければなりません。ここで、40 は優先順位が最も低く、80 は優先順位が最も高くなります。

ユーザーは、スケジューリング・ポリシーを SCHED_OTHER に設定するときに、スレッドの優先順位を変更することができます。 pthread_setschedparam」に渡すことのできる値は、40から80の範囲である。 60 より高い優先順位を設定できるのは、特権ユーザーのみです。 1 から 39 の範囲の値は 40 と同じ優先順位を提供し、81 から 127 の範囲の値は 80 と同じ優先順位を提供します。

戻り値

正常終了すると、0 が戻されます。 それ以外の場合は、エラー・コードが戻されます。

エラー・コード

pthread_setschedparamサブルーチンは、以下の場合に失敗する:

項目 説明
EINVAL thread パラメーターまたは schedparam パラメーターが無効です。
ENOSYS 優先順位スケジューリングの POSIX オプションは実装されていません。
ENOTSUP schedpolicy 属性または schedparam 属性の値はサポートされません。
EPERM ターゲット・スレッドに、操作を実行するための十分な許可がないか、または既に mutex プロトコルを使用しています。
ESRCH スレッド thread は存在しません。