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

スケジューリングパラメータの取得

pthread_attr_getschedparam(3C) は、pthread_attr_setschedparam() で定義されたスケジューリングパラメータを返します。

pthread_attr_getschedparam の構文

int pthread_attr_getschedparam(pthread_attr_t *restrict tattr, 
       const struct sched_param *restrict param);
#include <pthread.h> 
pthread_attr_t attr; 
struct sched_param param; 
int ret; 
/* get the existing scheduling param */ 
ret = pthread_attr_getschedparam (&tattr, &param);

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

スレッドを生成する前に優先順位属性を設定できます。子スレッドは、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;

/* initialized with default attributes */
ret = pthread_attr_init (&tattr);

/* safe to get existing scheduling param */
ret = pthread_attr_getschedparam (&tattr, &param);

/* set the priority; others are unchanged */
param.sched_priority = newprio;

/* setting the new scheduling param */
ret = pthread_attr_setschedparam (&tattr, &param);

/* specify explicit scheduling */
ret = pthread_attr_setinheritsched (&tattr, PTHREAD_EXPLICIT_SCHED);

/* with new priority specified */
ret = pthread_create (&tid, &tattr, func, arg); 

pthread_attr_getschedparam の戻り値

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


EINVAL

説明:

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