オブジェクト属性をデフォルト値に初期化するには、pthread_attr_init(3C) を使用します。その記憶領域は、実行中にスレッドシステムによって割り当てられます。
int pthread_attr_init(pthread_attr_t *tattr);
#include <pthread.h> pthread_attr_t tattr; int ret; /* initialize an attribute to the default value */ ret = pthread_attr_init(&tattr);
表 3–1 は、属性 (tattr) のデフォルト値の一覧です。
表 3–1 tattr のデフォルト属性値
属性 |
値 |
結果 |
---|---|---|
scope |
PTHREAD_SCOPE_PROCESS |
新しいスレッドはプロセス内のほかのスレッドと競合します。 |
detachstate |
PTHREAD_CREATE_JOINABLE |
スレッドの終了後に終了状態とスレッド ID が保存されます。 |
stackaddr |
NULL |
新しいスレッドはシステムによって割り当てられたスタックアドレスを持ちます。 |
stacksize |
0 |
新しいスレッドはシステムによって定義されたスタックサイズを持ちます。 |
priority |
0 |
新しいスレッドは優先順位 0 を持ちます。 |
inheritsched |
PTHREAD_EXPLICIT_SCHED |
新しいスレッドは親スレッドのスケジューリング優先順位を継承しません。 |
schedpolicy |
SCHED_OTHER |
新しいスレッドは、従来の Solaris タイムシェアリング (TS) スケジューリングクラスを使用します。 |
guardsize |
PAGESIZE |
スタックオーバーフローの保護。 |
inheritsched 属性のデフォルト値は、将来の Solaris リリースでは PTHREAD_EXPLICIT_SCHED から PTHREAD_INHERIT_SCHED に変更される可能性があります。この変更によって問題が発生する可能性を避けるために、デフォルト値を受け入れるのではなく、pthread_attr_setinheritsched() を呼び出して inheritsched 属性を希望する値に設定するようにしてください。
pthread_attr_init() は、正常終了時に 0 を返します。それ以外の戻り値は、エラーが発生したことを示します。以下の条件が検出されると、この関数は失敗し、対応する値を返します。
ENOMEM
説明:メモリーが不足し、スレッド属性オブジェクトを初期化できないときに返されます。