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

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

mutex が指す mutex のロックを試行し、その mutex がすでにロックされていればただちに戻るには、pthread_mutex_trylock(3C) を使用します。

pthread_mutex_trylock の構文

int pthread_mutex_trylock(pthread_mutex_t *mutex); 
#include <pthread.h>

pthread_mutex_t mutex;
int ret;

ret = pthread_mutex_trylock(&mutex); /* try to lock the mutex */

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

pthread_mutex_trylock の戻り値

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


EBUSY

説明:

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


EAGAIN

説明:

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

シンボル _POSIX_THREAD_PRIO_INHERIT が定義されていて、mutex がプロトコル属性値 PTHREAD_PRIO_INHERIT で初期化されています。さらに、pthread_mutexattr_setrobust_np() の引数 robustnessPTHREAD_MUTEX_ROBUST_NP の場合、この関数は失敗し、次のいずれかの値を返します。


EOWNERDEAD

説明:

pthread_mutex_lock の戻り値」の説明を参照してください。


ENOTRECOVERABLE

説明:

pthread_mutex_lock の戻り値」の説明を参照してください。


ENOMEM

説明:

同時に保持される mutex の上限数を超えています。