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

mutex の整合性保持

堅牢な mutex の所有者がその mutex をロック解除しないで終了すると、その mutex はロック解除され、不整合としてマークされます。次の所有者が EOWNERDEAD のリターンコードを持つロックを獲得します。

pthread_mutex_consistent_np() は、その所有者が処理を終了したあとも mutex オブジェクト mutex の整合性を保持します。

pthread_mutex_consistent_np の構文

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

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

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

mutex によって保護されている重要領域が、所有者の処理の失敗のため不整合の状態のままになっていることがあります。この場合は、この領域を整合させることができる場合にのみ mutex を整合させてください。

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

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

pthread_mutex_consistent_np の戻り値

pthread_mutex_consistent_np () は、正常終了時に 0 を返します。それ以外の戻り値は、エラーが発生したことを示します。

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


EINVAL

説明:

現在のスレッドが mutex を所有していないか、または mutex が不整合の状態を持つ PTHREAD_MUTEX_ROBUST_NP mutex ではありません。