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

pthread_cond_init の構文

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); 

cattrNULL に設定するのは、デフォルト条件変数属性オブジェクトのアドレスを渡すのと同じですが、メモリーのオーバーヘッドがありません。

静的に定義された条件変数をデフォルト属性に初期化するには、マクロ PTHREAD_COND_INITIALIZER を使用します。PTHREAD_COND_INITIALIZER マクロは、NULL 属性を指定して pthread_cond_init() を動的に割り当てた場合と同じ効果を適用します。エラーチェックは行われません。

複数のスレッドで同じ条件変数を同時に初期化または再初期化しないでください。条件変数を再初期化または削除する場合、アプリケーションでその条件変数が現在使用されていないことを確認しなければなりません。