#include <synch.h> (または #include <thread.h>) int mutex_init(mutex_t *mp, int type, void *arg));
mutex_init() は、mp が指す相互排他ロック (mutex ロック) を初期化します。type には、次のいずれかを指定できます (arg は現在は無視されます)。
0 に初期化されたメモリーに領域を確保することによって mutex を初期化することもできます。その場合は type に USYNC_THREAD を指定したものと仮定されます。
複数のスレッドから同じ mutex を同時に初期化してはいけません。一度初期化した mutex は、他のスレッドが使用している可能性があるので再初期化してはいけません。
#include <thread.h> mutex_t mp; int ret; /* このプロセスの中だけで使用する */ ret = mutex_init(&mp, USYNC_THREAD, 0);
#include <thread.h> mutex_t mp; int ret; /* すべてのプロセスの間で使用する */ ret = mutex_init(&mp, USYNC_PROCESS, 0);
#include <thread.h> int mutex_destroy (mutex_t *mp);
mutex_destroy() は、mp が指す mutex を削除します。mutex を格納する領域は解放されません。
#include <thread.h> int mutex_lock(mutex_t *mp);
mutex_lock() は、mp が指す mutex をロックします。mutex がすでにロックされている場合は、使用可能になるまで呼び出しスレッドがブロックされます (ブロック状態のスレッドは、優先順位別の待ち行列に入れられます)。
#include <thread.h> int mutex_unlock(mutex_t *mp);
mutex_unlock() は、mp が指す mutex のロックを解除します。mutex はロックされていなければならず、しかも呼び出しスレッドがその mutex を最後にロックした (つまり、現在保持している) スレッドでなければなりません。
#include <thread.h> int mutex_trylock(mutex_t *mp);
mutex_trylock() は、mp が指す mutex をロックしようとします。この関数はブロックしない点を除いて、mutex_lock() と同じ働きをします。