cv が指す条件変数をデフォルト値に初期化する場合や、すでに pthread_condattr_init() で設定されている条件変数を指定する場合は、pthread_cond_init(3C) を使用します。
int pthread_cond_init(pthread_cond_t *restrict cv, const pthread_condattr_t *restrict cattr);
#include <pthread.h> pthread_cond_t cv; pthread_condattr_t cattr; int ret; /* initialize a condition variable to its default value */ ret = pthread_cond_init(&cv, NULL); /* initialize a condition variable */ ret = pthread_cond_init(&cv, &cattr);
cattr を NULL に設定するのは、デフォルト条件変数属性オブジェクトのアドレスを渡すのと同じですが、メモリーのオーバーヘッドがありません。
静的に定義された条件変数をデフォルト属性に初期化するには、マクロ PTHREAD_COND_INITIALIZER を使用します。PTHREAD_COND_INITIALIZER マクロは、NULL 属性を指定して pthread_cond_init() を動的に割り当てた場合と同じ効果を適用します。エラーチェックは行われません。
複数のスレッドで同じ条件変数を同時に初期化または再初期化しないでください。条件変数を再初期化または削除する場合、アプリケーションでその条件変数が現在使用されていないことを確認しなければなりません。
pthread_cond_init() は、正常終了時に 0 を返します。それ以外の戻り値は、エラーが発生したことを示します。以下のいずれかの条件が検出されると、この関数は失敗し、対応する値を返します。
EINVAL
説明:cattr で指定された値が無効です。
EBUSY
説明:その条件変数は現在使用されています。
EAGAIN
説明:必要なリソースが利用できません。
ENOMEM
説明:メモリー不足のため条件変数を初期化できません。