Solaris スレッドでは、優先順位が親と異なるスレッドを生成する場合、SUSPEND モードで生成します。スレッドの優先順位は、停止している間に thr_setprio(3C) 関数を呼び出して変更されます。thr_setprio() が終了すると、スレッドは実行を再開します。
優先順位の高いスレッドは、同期オブジェクトの競合を考慮しながら、優先順位の低いスレッドより優先されます。
thr_setprio(3C) は、tid に指定されたスレッドの優先順位を、現在のプロセス内で newprio に指定された優先順位に変更します。POSIX スレッドの場合については、「pthread_setschedparam の構文」を参照してください。
#include <thread.h> int thr_setprio(thread_t tid, int newprio)
スレッドの有効な優先順位の範囲は、スケジューリングポリシーによって異なります。
thread_t tid; int ret; int newprio = 20; /* suspended thread creation */ ret = thr_create(NULL, NULL, func, arg, THR_SUSPENDED, &tid); /* set the new priority of suspended child thread */ ret = thr_setprio(tid, newprio); /* suspended child thread starts executing with new priority */ ret = thr_continue(tid);
thr_setprio() は、正常終了時に 0 を返します。次のいずれかの条件が検出された場合、thr_setprio() は失敗し、対応する値を返します。
ESRCH
説明:tid で指定した値が既存のスレッドを表していません。
EINVAL
説明:priority の値は、指定されたスレッドのスケジューリングポリシーには無効です。
EPERM
説明:呼び出し元は、優先順位を指定された値に設定するための適切なアクセス権を持っていません。