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

pthread_attr_getschedparam(3T)

プロトタイプ:

int	pthread_attr_getschedparam(pthread_attr_t *tattr,
    const struct sched_param *param);
#include <pthread.h>

pthread_attr_t attr;
struct sched_param param;
int ret;

/* 既存のスケジューリングパラメタを取得する */
ret = pthread_attr_getschedparam (&tattr, &param);

戻り値

正常終了時は 0 です。それ以外の戻り値は、エラーが発生したことを示します。以下の条件が検出されると、この関数は失敗し、対応する値を戻します。


EINVAL

param の値が NULL か、tattr の値が無効です。

指定の優先順位をもつスレッドを生成する

スレッドを生成する前に優先順位属性を設定できます。子スレッドは、sched_param 構造体で指定した新しい優先順位で生成されます (この構造体には他のスケジューリング情報も含まれます)。

既存のパラメタを取得し、スレッドの優先順位を変更してから優先順位を再設定するという方法をお勧めします。

この方法の例を例 3-2 に示します。


例 3-2 優先順位を設定したスレッドの生成

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

pthread_attr_t tattr;
pthread_t tid;
int ret;
int newprio = 20;
sched_param param;

/* デフォルト属性で初期化する */
ret = pthread_attr_init (&tattr);

/* 既存のスケジューリングパラメタを取得する */
ret = pthread_attr_getschedparam (&tattr, &param);

/* 優先順位を設定する。それ以外は変更なし */
param.sched_priority = newprio;

/* 新しいスケジューリングパラメタを設定する */
ret = pthread_attr_setschedparam (&tattr, &param);

/* 指定した新しい優先順位を使用する */
ret = pthread_create (&tid, &tattr, func, arg);