pthread_mutexattr_setprioceiling(3C) 可用来设置互斥锁的优先级上限。
#include <pthread.h> int pthread_mutex_setprioceiling(pthread_mutex_t *mutex, int prioceiling, int *old_ceiling);
pthread_mutex_setprioceiling() 可更改互斥锁 mutex 的优先级上限 prioceiling。 pthread_mutex_setprioceiling() 可锁定互斥锁(如果未锁定的话),或者一直处于阻塞状态,直到 pthread_mutex_setprioceiling() 成功锁定该互斥锁,更改该互斥锁的优先级上限并将该互斥锁释放为止。锁定互斥锁的过程无需遵循优先级保护协议。
如果 pthread_mutex_setprioceiling() 成功,则将在 old_ceiling 中返回以前的优先级上限值。如果 pthread_mutex_setprioceiling() 失败,则互斥锁的优先级上限保持不变。
如果成功完成,pthread_mutex_setprioceiling() 会返回 0。其他任何返回值都表示出现了错误。
如果出现以下情况,pthread_mutexatt_setprioceiling() 将失败并返回对应的值。
ENOSYS
描述:选项_POSIX_THREAD_PRIO_PROTECT 未定义并且该实现不支持此函数。
如果出现以下任一情况,pthread_mutex_setprioceiling() 可能会失败并返回对应的值。
EINVAL
描述:prioceiling 所请求的优先级超出了范围。
EINVAL
描述:mutex 指定的值不会引用当前存在的互斥锁。
ENOSYS
描述:该实现不支持互斥锁的优先级上限协议。
EPERM
描述:调用方无权执行该操作。