多线程编程指南

设置互斥锁的优先级上限

pthread_mutexattr_setprioceiling(3C) 可用来设置互斥锁的优先级上限。

pthread_mutex_setprioceiling 语法

#include <pthread.h>



int pthread_mutex_setprioceiling(pthread_mutex_t *mutex, 

					int prioceiling, int *old_ceiling);

pthread_mutex_setprioceiling() 可更改互斥锁 mutex 的优先级上限 prioceilingpthread_mutex_setprioceiling() 可锁定互斥锁(如果未锁定的话),或者一直处于阻塞状态,直到 pthread_mutex_setprioceiling() 成功锁定该互斥锁,更改该互斥锁的优先级上限并将该互斥锁释放为止。锁定互斥锁的过程无需遵循优先级保护协议。

如果 pthread_mutex_setprioceiling() 成功,则将在 old_ceiling 中返回以前的优先级上限值。如果 pthread_mutex_setprioceiling() 失败,则互斥锁的优先级上限保持不变。

pthread_mutex_setprioceiling 返回值

如果成功完成,pthread_mutex_setprioceiling() 会返回 0。其他任何返回值都表示出现了错误。

如果出现以下情况,pthread_mutexatt_setprioceiling() 将失败并返回对应的值。


ENOSYS

描述:

选项_POSIX_THREAD_PRIO_PROTECT 未定义并且该实现不支持此函数。

如果出现以下任一情况,pthread_mutex_setprioceiling() 可能会失败并返回对应的值。


EINVAL

描述:

prioceiling 所请求的优先级超出了范围。


EINVAL

描述:

mutex 指定的值不会引用当前存在的互斥锁。


ENOSYS

描述:

该实现不支持互斥锁的优先级上限协议。


EPERM

描述:

调用方无权执行该操作。