PTHREAD_ATTR_INIT

Section: C Library Functions (3)
Updated: LinuxThreads
IndexJM Home Page

 

名前

pthread_attr_init, pthread_attr_destroy, pthread_attr_setdetachstate, pthread_attr_getdetachstate, pthread_attr_setschedparam, pthread_attr_getschedparam, pthread_attr_setschedpolicy, pthread_attr_getschedpolicy, pthread_attr_setinheritsched, pthread_attr_getinheritsched, pthread_attr_setscope, pthread_attr_getscope - スレッド生成時の属性

 

書式

#include <pthread.h>

int pthread_attr_init(pthread_attr_t *attr);

int pthread_attr_destroy(pthread_attr_t *attr);

int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);

int pthread_attr_getdetachstate(const pthread_attr_t *attr, int *detachstate);

int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);

int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *policy);

int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param);

int pthread_attr_getschedparam(const pthread_attr_t *attr, struct sched_param *param);

int pthread_attr_setinheritsched(pthread_attr_t *attr, int inherit);

int pthread_attr_getinheritsched(const pthread_attr_t *attr, int *inherit);

int pthread_attr_setscope(pthread_attr_t *attr, int scope);

int pthread_attr_getscope(const pthread_attr_t *attr, int *scope);

 

説明

スレッドの属性を設定するには、pthread_attr_t型のスレッド属性オブジェクトattrに値を格納し、pthread_create(3) の第 2 引数として渡せばよい。NULLを渡すことは、 すべての属性がデフォルトに設定されたスレッド属性オブジェクトを 渡すのと同等である。

pthread_attr_initはスレッド属性オブジェクトattrを初期化して、各属性のデフォルトの値を格納する。 ( 各属性のデフォルト値は下を参照のこと。 )

それぞれの属性attrname( 全属性のリストは下を参照のこと ) は、 関数pthread_attr_setattrnameで個別に設定したり、pthread_attr_getattrnameで個別に取得したりすることが可能である。

pthread_attr_destroyはスレッド属性オブジェクトを破壊する。 破壊したオブジェクトは、再初期化するまでは 再び使用してはならない。pthread_attr_destroyは LinuxThreads の実装では何もしない。

属性オブジェクトは新しいスレッドを生成するときにだけ参照される。 複数のスレッドの生成に同じ属性オブジェクトを使用することもできる。pthread_createの呼び出しの後に属性オブジェクトを変更しても、 すでに生成されたスレッドの属性は変化しない。

次のようなスレッド属性に対応している:

 

detachstate (デタッチ状態)

スレッドが合流可能な状態で生成される (PTHREAD_CREATE_JOINABLE) か、デタッチ状態で生成される (PTHREAD_CREATE_DETACHED) かを制御する。

デフォルト値: PTHREAD_CREATE_JOINABLE

合流可能な状態の場合、 別のスレッドがpthread_join(3) を呼び出すことによって、そのスレッドの終了に同期して 終了コードを取得することができる。 しかし、スレッドの資源の一部はスレッドが終了した後も 確保されたまま残り、 別のスレッドがそのスレッドに対してpthread_join(3) を呼び出したときに限って解放される。

デタッチ状態の場合、スレッドの資源は終了した時に直ちに解放される。 しかし、pthread_join(3) を使用してスレッドの終了に同期することはできない。

合流可能な状態で生成されたスレッドは、pthread_detach(3) を呼び出してデタッチスレッドに変更することができる。

 

schedpolicy (スケジューリングポリシー)

スレッドのスケジューリングポリシーを選択する。 とりうる値はSCHED_OTHER(通常の、リアルタイムでないスケジューリング) 、SCHED_RR(ラウンドロビン方式のリアルタイムスケジューリング) 、SCHED_FIFO(先入れ先出し (FIFO) 方式のリアルタイムスケジューリング) のいずれかである。 スケジューリングポリシーに関するさらなる情報についてはsched_setpolicy(2) を参照のこと。

デフォルト値:SCHED_OTHER

リアルタイムスケジューリングポリシーであるSCHED_RRSCHED_FIFOは、スーパーユーザ権限のプロセスに限って使用できる。

スレッドのスケジューリングポリシーは、 生成後にpthread_setschedparam(3) を用いて変更することができる。

 

schedparam (スケジューリングパラメータ)

スレッドのスケジューリングパラメータ (特に、スケジューリング優先度) を 指定する。 スケジューリングパラメータに関するさらなる情報についてはsched_setparam(2) を参照のこと。

デフォルト値: 優先度は 0 。

この属性はスケジューリングポリシーがSCHED_OTHERの時には意味を持たず、 リアルタイムポリシーSCHED_RRSCHED_FIFOに対してのみ有効である。

スレッドのスケジューリング優先度は、 生成後にpthread_setschedparam(3) を用いて変更することができる。

 

inheritsched (スケジューリングの継承)

新しく生成されるスレッドの スケジューリングポリシーとスケジューリングパラメータが 属性schedpolicyおよびschedparamの値で決定される (PTHREAD_EXPLICIT_SCHED) か、親スレッドから継承される (PTHREAD_INHERIT_SCHED) かを指定する。

デフォルト値: PTHREAD_EXPLICIT_SCHED

 

scope (スコープ)

生成されるスレッドのスケジューリング競争スコープを定義する。 LinuxThreads の実装で唯一対応している値はPTHREAD_SCOPE_SYSTEMで、 スレッドは同じ計算機で実行中のすべてのプロセスと CPU 時間を取り合う。 詳しくいえば、スレッドの優先度は計算機上の他のすべてのプロセスの優先度と 同列のものと解釈される。 POSIX 標準で規定されるもう 1 つの値PTHREAD_SCOPE_PROCESSは、 スケジューリングの競争は実行中のプロセス中のスレッド間だけで 起こることを意味する。 すなわち、スレッドの優先度はプロセス中の他のスレッドの優先度と 同列のものと解釈され、他のプロセスの優先度とは関わりがない。 LinuxThreads はPTHREAD_SCOPE_PROCESSに対応していない。

デフォルト値: PTHREAD_SCOPE_SYSTEM

 

返り値

すべての関数は成功すると 0 を返し、 エラーならば非 0 のエラーコードを返す。 成功の場合、 関数群pthread_attr_getattrnameは属性attrnameの現在の値を第 2 引数で指し示される領域に格納する。

 

エラー

関数pthread_attr_setdetachstateはエラーの場合、次のようなエラーコードを返す:

EINVAL
指定されたdetachstatePTHREAD_CREATE_JOINABLEおよびPTHREAD_CREATE_DETACHEDのいずれでもない。

関数pthread_attr_setschedparamはエラーの場合、次のようなエラーコードを返す:

EINVAL
paramで指定された優先度が 現在のattrのスケジューリングポリシーに対する許容範囲 (SCHED_FIFOおよびSCHED_RRの場合は 1 から 99 まで、SCHED_OTHERの場合は 0 のみ ) を超えている。

関数pthread_attr_setschedpolicyはエラーの場合次のようなエラーコードを返す:

EINVAL
指定されたpolicySCHED_OTHERおよびSCHED_FIFOSCHED_RRのいずれでもない

ENOTSUP
policySCHED_FIFOまたはSCHED_RRであって、呼び出しプロセスの実効ユーザがスーパーユーザではない。

関数pthread_attr_setinheritschedはエラーの場合次のようなエラーコードを返す:

EINVAL
指定されたinheritPTHREAD_INHERIT_SCHEDおよびPTHREAD_EXPLICIT_SCHEDのいずれでもない。

関数pthread_attr_setscopeはエラーの場合次のようなエラーコードを返す:

EINVAL
指定されたscopePTHREAD_SCOPE_SYSTEMおよびPTHREAD_SCOPE_PROCESSのいずれでもない。

ENOTSUP
指定されたscopePTHREAD_SCOPE_PROCESS(未対応) である。

 

著者

Xavier Leroy <Xavier.Leroy@inria.fr>

 

関連項目

pthread_create(3),pthread_join(3),pthread_detach(3),pthread_setschedparam(3).

[訳注] glibc-linuxthreads の最新のドキュメントは Texinfo形式で提供されている。 以下は glibc-linuxthreads-2.3.1 の Texinfo ファイルからの引用で、 「説明」に追記されている。 glibc-linuxthreads-2.1 以降 guardsize および stackaddr 、 stacksize が、 glibc-linuxthreads-2.2 以降 stack が追加された。

int pthread_attr_setstackaddr(pthread_attr_t *attr, void *stackaddr);

int pthread_attr_getstackaddr(const pthread_attr_t *attr, void **stackaddr);

 

stackaddr (スタックアドレス)

アプリケーション管理スタックのアドレスを指定する。 スタックのサイズはPTHREAD_STACK_MIN以上でなければならない。

int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);

int pthread_attr_getstacksize(const pthread_attr_t *attr, size_t *stacksize);

 

stacksize (スタックサイズ)

スレッドに対して確保されるスタックのサイズを変更する。 最小スタックサイズが指定した値に設定される。単位はバイトである。

指定した値がシステムの最大スタックサイズを超える場合、 またはPTHREAD_STACK_MINよりも小さい場合、pthread_attr_setstacksizeは失敗し、EINVALを返す。

int pthread_attr_setstack(pthread_attr_t *attr, void *stackaddr, size_t stacksize);

int pthread_attr_getstack(const pthread_attr_t *attr, void **stackaddr, size_t *stacksize);

 

stack (スタック)

生成されるスレッドに用いられるアプリケーション管理スタックの アドレスとサイズの両方を指定する。 メモリ領域のベースをstackaddrに、メモリ領域のサイズをバイト単位でstacksizeに指定する。

stacksizeの値がPTHREAD_STACK_MINよりも小さいか、 システムの最大スタックサイズを超える場合、 またはstackaddrの値が適切なアライメントでない場合、pthread_attr_setstackは失敗し、EINVALを返す。

int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize);

int pthread_attr_getguardsize(const pthread_attr_t *attr, size_t *guardsize);

 

guardsize (保護サイズ)

スレッドのスタックの保護領域の最小のサイズをバイト単位で変更する。 デフォルトのサイズは 1 ページである。 この値が設定された場合、指定した値以上の最も近いページサイズに丸められる。 この値が 0 に設定された場合、このスレッドには保護領域は作成されない。 保護領域として確保された領域は、スタックオーバーフローを検出するのに 用いられる。したがって、大きな構造体の領域をスタック内に確保する場合、 スタックオーバーフローを検出するためにはそれよりも 大きい保護領域を指定する必要がある。

スレッドが独自のスタックを使用している場合(stackaddr属性が設定されている場合) 、guardsize属性は無視される。

指定した値がstacksizeを超える場合、pthread_attr_setguardsizeは失敗し、EINVALを返す。


関連キーワード

attr,pthread,int,PTHREAD,スケジューリング,SCHED,スタック,サイズ,stacksize,stackaddr 

Index

名前
書式
説明
detachstate (デタッチ状態)
schedpolicy (スケジューリングポリシー)
schedparam (スケジューリングパラメータ)
inheritsched (スケジューリングの継承)
scope (スコープ)
返り値
エラー
著者
関連項目
stackaddr (スタックアドレス)
stacksize (スタックサイズ)
stack (スタック)
guardsize (保護サイズ)

This document was created byman2html, using the manual pages.
Time: 20:43:08 GMT, August 08, 2017