マルチスレッドのプログラミング

スレッド優先順位の設定

Solaris スレッドでは、優先順位が親と異なるスレッドを生成する場合、SUSPEND モードで生成します。そして、停止状態のときに thr_setprio(3THR) 関数を使ってスレッド優先順位を変更し、実行を再開します。

libthread では、同期オブジェクトの競合を考慮しながら、優先順位の高いスレッドが優先順位の低いスレッドより優先されます。

thr_setprio(3THR)

thr_setprio(3THR) は、現在のプロセス内の tid で指定したスレッドの優先順位を、newprio で指定した優先順位に変更します (POSIX スレッドについては、pthread_setschedparam(3THR)を参照)。


#include <thread.h>

int thr_setprio(thread_t tid, int newprio)

スレッドのスケジューリングは、デフォルトの設定では、最低の優先順位を表す 0 から最高の優先順位である 127 までの、固定的な優先順位に基づいて行われます。


thread_t tid;
int ret;
int newprio = 20;

/* 停止状態のスレッドを生成する */
ret = thr_create(NULL, NULL, func, arg, THR_SUSPENDED, &tid);

/* 停止状態の子スレッドに対して新しい優先順位を設定する */
ret = thr_setprio(tid, newprio);

/* 停止状態の子スレッドを新しい優先順位で開始する */
ret = thr_continue(tid);