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

条件変数の属性の初期化

このオブジェクトに割り当てられた属性をデフォルト値に初期化するには、pthread_condattr_init(3C) を使用します。各属性オブジェクトのための記憶領域は、実行時にスレッドシステムによって割り当てられます。

pthread_condattr_init の構文

int pthread_condattr_init(pthread_condattr_t *cattr);
#include <pthread.h>
pthread_condattr_t cattr;
int ret;

/* initialize an attribute to default value */
ret = pthread_condattr_init(&cattr); 

この関数が呼び出されたときの pshared 属性のデフォルト値は PTHREAD_PROCESS_PRIVATE です。 pshared がこの値の場合は、初期化された条件変数がプロセス内で使用可能であることを示します。

cattr は不透明なデータ型で、システムによって割り当てられた属性オブジェクトを格納します。cattr のスコープとして取り得る値は、PTHREAD_PROCESS_PRIVATEPTHREAD_PROCESS_SHARED です。PTHREAD_PROCESS_PRIVATE はデフォルト値です。

条件変数の属性を再利用するには、まず、この属性を pthread_condattr_destroy(3C) で初期化し直す必要があります。pthread_condattr_init() 呼び出しは、不透明なオブジェクトへのポインタを戻します。そのオブジェクトが削除されないと、結果的にメモリーリークを引き起こします。

pthread_condattr_init の戻り値

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


ENOMEM

説明:

メモリーが足りなくて、スレッド属性オブジェクトを初期化できません。


EINVAL

説明:

cattr で指定された値が無効です。