標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
POSIX.4a |
両方 | POSIX(ON) |
#define _OPEN_THREADS
#include <pthread.h>
int pthread_mutex_init(pthread_mutex_t *mutex, pthread_mutexattr_t *attr);
#define _UNIX03_THREADS
#include <pthread.h>
int pthread_mutex_init(pthread_mutex_t * __restrict__mutex,
const pthread_mutexattr_t * __restrict__attr);
attr で指定された属性を使用して、mutex によって 参照された mutex を作成します。attr が NULL の場合には、デフォルト mutex 属性 (NONRECURSIVE) が 使用されます。
正常に実行された場合、pthread_mutex_init() は 0 を戻し、mutex は初期化され、アンロックされた状態になります。
Single UNIX Specification、バージョン 3 の特殊な動作: 正常に実行されなかった場合、pthread_mutex_init() はエラーを示すエラー番号を戻します。
_OPEN_SYS_MUTEX_EXT フィーチャー・スイッチをオプションで組み込むことがで きます。 このフィーチャーが設定されると、相当に大きい pthread_mutex_t オブジェ クトが定義されます。 このフィーチャーは、共用メモリー内の mutex と条件変数の管理に使用されます。
提供された拡張 pthread_mutex_t オブジェクトが共用メモリー内にない場合、その オブジェクトは他のプロセスからアクセスできないので、pthread_mutex_init() はその オブジェクトを非共用オブジェクトとして扱います。
pthread_mutex_t オブジェクトは同じコンパイル単位内で定義および初期化するよ うにお勧めします。 初期化される pthread_mutex_t オブジェクトを移動させる場合、初期化コードは、 そのオブジェクトを定義するコードと同じ _OPEN_SYS_MUTEX_EXT フィーチャー設定値で コンパイルされたことを確認してください。
⁄* CELEBP37 *⁄
#ifndef _OPEN_THREADS
#define _OPEN_THREADS
#endif
#include <pthread.h>
main() {
pthread_mutexattr_t attr;
pthread_mutex_t mut;
if (pthread_mutexattr_init(&attr) == -1) {
perror("mutexattr_init error");
exit(1);
}
if (pthread_mutex_init(&mut, &attr) == -1) {
perror("mutex_init error");
exit(2);
}
exit(0);
}