マルチスレッドのプログラミング

ブロックしないで行う mutex のロック

pthread_mutex_trylock(3T)

pthread_mutex_trylock(3T) は、mutex が指す mutex のロックを試みます。(Solaris スレッドについては、「mutex_trylock(3T)」を参照)。

プロトタイプ:
int	pthread_mutex_trylock(pthread_mutex_t *mutex); 
#include <pthread.h>

pthread_mutex_t mutex;
int ret;

ret = pthread_mutex_trylock(&mutex); /* mutex のロックを試みる */

この関数はブロックしない点を除いて、pthread_mutex_lock() と同じ働きをします。mutex が参照している mutex オブジェクトが、現在のスレッドを含むいずれかのスレッドによってロックされている場合は、呼び出しはただちに返されます。mutex オブジェクトがロックされていなければ、呼び出しスレッドがロックを獲得します。

戻り値

正常終了時は 0 です。それ以外の戻り値は、エラーが発生したことを示します。以下のいずれかの条件が検出されると、この関数は失敗し、次の値を戻します。


EBUSY

mutex が指している mutex はすでにロックされているため、獲得できません。


EAGAIN

mutex に繰り返し行われたロック回数が最大数を超えるため、mutex を所有できません。