名称
pthread_cond_init(), pthread_cond_destroy() ― 条件変数の初期化と消去
構文
#include <pthread.h>
int pthread_cond_init(
pthread_cond_t *cond,
const pthread_condattr_t *attr
);
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
int pthread_cond_destroy(
pthread_cond_t *cond
);
パラメータ
| cond | | 初期化または消去する条件変数へのポインター。 |
| attr | | 初期化する条件変数の特性を定義する属性オブジェクトへのポインター。
ポインターが NULL の場合、デフォルトの属性が使用されます。 |
説明
pthread_cond_init() 関数は、条件変数 cond を属性 attr で初期化します。 attr が NULL の場合、属性オブジェクトを初期化するために、デフォルトの条件変数属性が使用されます。
デフォルトの条件変数属性の一覧については、 pthread_condattr_init() を参照してください。
条件変数は、初期化が成功した後で、条件変数に対する操作で使用することができます。
条件変数の初期化は一度だけにしなければなりません。そうしないと、不測の動作が生じる結果となります。 pthread_once() 関数は、条件変数が一度だけ初期化されていることを確実にする手段を提供します。
マクロ PTHREAD_COND_INITIALIZER は、静的に割り付けられた条件変数の初期化に使用することができます。
この場合、条件変数はデフォルトの属性で初期化されます。 静的に初期化された変数に対して pthread_cond_init() 関数を呼び出す必要はありません。
attr で参照される条件変数属性オブジェクトの プロセス共有 属性が、 PTHREAD_PROCESS_SHARED として定義される場合、条件変数は、条件変数を共有するプロセスがアクセスできるように割り当てられなければなりません。
これは、メモリーマップ関数 mmap(2) を参照)
または共有メモリー関数 shmget(2) を参照)
によって実行することができます。
pthread_cond_destroy() は、条件変数 cond を消去します。この関数は、 cond に無効な値を設定する可能性があります。 消去した条件変数は、 pthread_cond_init() 関数を使用して再度初期化することができます。
条件変数を消去した後で条件変数呼び出しを使用すると、結果は不定となります。
条件変数は、現在そこでブロックされているスレッドが存在しない場合しか消去できません。
現在使用されている条件変数を消去すると、結果は不定となります。
戻り値
正常終了すると、 pthread_cond_init() と pthread_cond_destroy() は 0 を返します。
それ以外の場合、エラーの内容を表すエラー番号を返します (errno 変数は使用しません)。
エラー
以下の条件の場合、 pthread_cond_init() 関数は、該当するエラー番号を返します。
| [EAGAIN] | | 条件変数を初期化するために使用可能なリソース (メモリー以外) が、システムにない場合。 |
| [ENOMEM] | | 条件変数の初期化で使用可能なメモリー容量が不十分の場合。 |
以下の条件の場合、 pthread_cond_init() 関数は、該当するエラー番号を返します。
| [EINVAL] | | cond または attr で指定された値が無効の場合。 |
| [EBUSY] | | 指定された条件変数が、すでに初期化済みの条件変数の場合。 |
| [EFAULT] | | cond パラメータが、無効なアドレスを指している場合。 |
以下の条件の場合、 pthread_cond_destroy() 関数は、該当するエラー番号を返します。
| [EINVAL] | | cond が、有効な条件変数でない場合。 |
| [EBUSY] | | 別のスレッドで使用中の cond を消去しようとした場合。 |
警告
条件変数の領域は、 pthread_cond_init() を呼び出す前に割り当てなければなりません。 attr の プロセス共有 属性が PTHREAD_PROCESS_SHARED であり、条件変数に割り当てられた領域に協調スレッドがアクセスできない場合、動作は不定となります。
著者
pthread_cond_init() と pthread_cond_destroy() は、IEEE
POSIX P1003.1c 標準から派生しました。
標準準拠
pthread_cond_init(): POSIX 1003.1c.
pthread_cond_destroy(): POSIX 1003.1c.