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

mutex の整合性保持

pthread_mutex_consistent_np(3T)


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

注 -

pthread_mutex_consistent_np() が適用されるのは、シンボル _POSIX_THREAD_PRIO_INHERIT が定義され、かつプロトコル属性値 PTHREAD_PRIO_INHERIT で初期化されている mutex に対してのみです。


mutex の所有者が終了すると、mutex が不整合になる可能性があります。

pthread_mutex_consistent_np が、mutex の所有者の終了後に mutex オブジェクト、mutex を整合させます。

不整合の mutex を獲得するには、pthread_mutex_lock() を呼び出します。戻り値 EOWNERDEAD は不整合な mutex であることを示します。

pthread_mutex_consistent_np() は、pthread_mutex_lock() への前の呼び出しによって獲得された mutex を保持している間に呼び出してください。

mutex によって保護されている重要領域が、終了した所有者によって不整合の状態のままになっている可能性があるので、mutex によって保護されている重要領域を整合させることができる場合にのみ mutex を整合させてください。

整合された mutex に対して pthread_mutex_lock()pthread_mutex_unlock() および pthread_mutex_trylock() を呼び出すと、通常の方法で動作します。

不整合でない、あるいは保持されていない mutex に対する pthread_mutex_consistent_np() の動作は、定義されていません。

戻り値

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

次の条件が検出されると、pthread_mutex_consistent_np() は失敗します。


ENOSYS

オプション _POSIX_THREAD_PRIO_INHERIT が定義されていないか、あるいはこの実装が pthread_mutex_consistent_np() 関数をサポートしていません。

次の条件が検出されると、pthread_mutex_consistent_np() は失敗します。


EINVAL

mutex で指定された値は無効です。