pthread_mutex_init() は、mp が指す mutex をデフォルト値に初期化 (mattr が NULL の場合) するか、pthread_mutexattr_init() ですでに設定されている mutex 属性を指定するときに使用します。
プロトタイプ: int pthread_mutex_init(pthread_mutex_t *mp, const pthread_mutexattr_t *mattr);
#include <pthread.h> pthread_mutex_t mp = PTHREAD_MUTEX_INITIALIZER; pthread_mutexattr_t mattr; int ret; /* mutex をデフォルト値に初期化する */ ret = pthread_mutex_init(&mp, NULL); /* mutex を初期化する */ ret = pthread_mutex_init(&mp, &mattr);
初期化された mutex は、ロック解除状態になります。
mattr を NULL にするのは、デフォルト mutex 属性オブジェクトのアドレスを渡すのと同じことですが、メモリーのオーバーヘッドがありません。
静的に定義された mutex は、マクロ PTHREAD_MUTEX_INITIALIZER により、デフォルト属性をもつように直接初期化できます。
mutex ロックは、他のスレッドが使用している可能性がある間は再初期化したり削除したりしてはいけません。どちらの動作も正しく行われなければプログラムで障害が発生します。mutex を再初期化または削除する場合、アプリケーションはその mutex が現在使用されていないことを確認しなければなりません。
正常終了時は 0 です。それ以外の戻り値は、エラーが発生したことを示します。以下のいずれかの条件が検出されると、この関数は失敗し、対応する値を戻します。