| 標準/拡張機能 | C/C++ | 依存項目 |
|---|---|---|
POSIX.4a |
両方 | POSIX(ON) |
#define _OPEN_THREADS
#include <pthread.h>
int pthread_mutex_lock(pthread_mutex_t *mutex);
#define _UNIX03_THREADS
#include <pthread.h>
int pthread_mutex_lock(pthread_mutex_t *mutex);
mutex を識別する mutex オブジェクトをロックします。mutex は、共用リソースを保護する場合に使用されます。mutex が既に別のスレッドによってロックされている場合には、スレッドは mutex が使用可能になるのを待機します。mutex をロックしたスレッドはその現行所有者になり、そのスレッドがその 所有者をアンロックするまで所有者になったままです。
mutex が再帰的属性を持つ場合、そのロックの使用法は異なることがあります。この種の mutex が同じスレッドによって複数回ロックされると、カウントが増分され、待機スレッドは追加されません。 所有スレッドは pthread_mutex_unlock() を同じ回数呼び出して、カウントをゼロに戻す必要があります。
正常に実行された場合、pthread_mutex_lock() は 0 を戻します。
Single UNIX Specification、バージョン 3 の特殊な動作: 正常に実行されなかった場合、pthread_mutex_lock() はエラーを示すエラー番号を戻します。
_OPEN_SYS_MUTEX_EXT フィーチャー・スイッチが設定されている場合、スレッドが 終了 (正常終了であっても、異常終了であっても) したときに、すべての 共用 (拡張) mutex ロックが解放されます。 スレッドが通常に終了した場合 (すなわち、pthread_exit() また は pthread_cancel())、mutex ロックの最初の待機者が再開されます。 スレッドが異常終了した場合、この mutex ロックの mutex 待機者のプロセスは終 了します。
⁄* CELEBP38 *⁄
#ifndef _OPEN_THREADS
#define _OPEN_THREADS
#endif
#include <pthread.h>
#include <stdio.h>
main() {
pthread_mutex_t mut;
if (pthread_mutex_init(&mut, NULL) != 0) {
perror("mutex_lock");
exit(1);
}
if (pthread_mutex_lock(&mut) != 0) {
perror("mutex_lock");
exit(2);
}
puts("the mutex has been locked");
exit(0);
}