pthread_cond_destroy または pthread_cond_init サブルーチン
目的
条件変数を初期化および破棄します。
ライブラリー
スレッド・ライブラリー (libpthreads.a)
構文
#include <pthread.h>
int pthread_cond_init (cond, attr)
pthread_cond_t *cond;
const pthread_condattr_t *attr;
int pthread_cond_destroy (cond)
pthread_cond_t *cond;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;説明
関数 pthread_cond_init は、 attrによって参照される属性を使用して、 cond によって参照される条件変数を初期化します。 attr が NULL の場合、デフォルトの条件変数属性が使用されます。この結果は、デフォルトの条件変数属性オブジェクトのアドレスを渡す場合と同じです。 初期化が正常に完了すると、条件変数の状態が初期化されます。
既に初期化されている条件変数を初期化しようとすると、未定義の動作になります。
関数 pthread_cond_destroy は、 condによって指定された特定の条件変数を破棄します。オブジェクトは、事実上、初期化されていない状態になります。 インプリメンテーションが原因で、 pthread_cond_destroy が cond によって参照されるオブジェクトを無効な値に設定することがあります。 破棄された条件変数オブジェクトは、 pthread_cond_initを使用して再初期化できます。破棄された後でオブジェクトを参照した場合の結果は未定義です。
スレッドが現在ブロックされていない初期化済み条件変数を破棄しても安全です。 他のスレッドが現在ブロックされている条件変数を破棄しようとすると、未定義の動作になります。
デフォルトの条件変数属性が適切な場合は、マクロ PTHREAD_COND_INITIALIZER を使用して、静的に割り振られる条件変数を初期化できます。 この効果は、パラメーター attr を NULL に指定して pthread_cond_init を呼び出すことによる動的初期化と同等です。ただし、エラー検査は実行されません。
パラメーター
| 項目 | 説明 |
|---|---|
| 条件 | 条件変数へのポインター。 |
| attr | 条件の属性を指定します。 |
戻り値
正常に実行された場合、 pthread_cond_init および pthread_cond_destroy 関数はゼロを戻します。 正常に実行されなかった場合、エラーを示すエラー番号を戻します。 EBUSY および EINVAL エラー検査は、実装されている場合、 condによって指定された条件変数の状態を変更する前に、関数の処理の開始時に即時に実行され、エラーが戻されたかのように動作します。
エラー・コード
pthread_cond_init 関数は、以下の場合に失敗します。
| 項目 | 説明 |
|---|---|
| EAGAIN | 別の条件変数を初期化するためにシステムで必要なリソース (メモリー以外) が 不足しました。 |
| ENOMEM | 条件変数を初期化するためのメモリが不足しています。 |
pthread_cond_init 関数は、以下の場合に失敗することがあります。
| 項目 | 説明 |
|---|---|
| EINVAL | attr によって指定された値が無効です。 |
pthread_cond_destroy 関数は、以下の場合に失敗することがあります。
| 項目 | 説明 |
|---|---|
| EBUSY | インプリメンテーションが、 cond によって参照されているオブジェクトを (例えば、別のスレッドによって pthread_cond_wait または pthread_cond_timedwait で使用されている間に) 破棄しようとする試みを検出しました。 |
| EINVAL | cond によって指定された値が無効です。 |
これらの関数は、エラー・コード EINTR を戻しません。