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