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

pthread_mutex_setprioceiling(3T)

pthread_mutex_setprioceiling(3T) は、mutex の優先順位上限を設定します。


#include <pthread.h>

int pthread_mutex_setprioceiling(pthread_mutexatt_t *mutex, int prioceiling, int *old_ceiling);

pthread_mutex_setprioceiling()mutex の優先順位上限、つまり prioceiling を変更します。pthread_mutex_setprioceiling() は、mutex のロックが解除されている場合 mutex をロックするか、または mutex を正常にロックできるようになるまでブロックして、mutex の優先順位上限を変更し、mutex を開放します。mutex をロックするプロセスでは、優先順位保護プロトコルを守る必要はありません。


注 -

mutex 属性オブジェクト、つまり mutex に優先順位上限が含まれるのは、シンボル _POSIX_THREAD_PRIO_PROTECT が定義されている場合だけです。


pthread_mutex_setprioceiling() が正常に終了すると、優先順位上限の以前の値が old_ceiling で返されます。pthread_mutex_setprioceiling() が失敗すると、mutex の優先順位上限は元のままになります。

戻り値

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

次の条件が検出されると、pthread_mutexatt_setprioceiling() は失敗し、それに対応する値を返します。


ENOSYS

オプション _POSIX_THREAD_PRIO_PROTECT が定義されておらず、この実装はこの関数をサポートしていません。

次のいずれかの条件が検出されると、 pthread_mutex_setprioceiling() は失敗し、対応する値を返します。


EINVAL

prioceiling で要求された優先順位が範囲外です。


EINVAL

mutex で指定された値は現在の既存の mutex を参照していません。


ENOSYS

この実装は mutex の優先順位上限プロトコルをサポートしていません。


EPERM

呼び出し元はこの操作を行うための権限を持っていません。