如果某个互斥锁的属主失败,该互斥锁可能会变为不一致。
使用 pthread_mutex_consistent_np 可使互斥对象 mutex 在其属主停止之后保持一致。
#include <pthread.h> int pthread_mutex_consistent_np(pthread_mutex_t *mutex);
仅当定义了 _POSIX_THREAD_PRIO_INHERIT 符号时,pthread_mutex_consistent_np() 才适用,并且仅适用于使用协议属性值 PTHREAD_PRIO_INHERIT 初始化的互斥锁。
调用 pthread_mutex_lock() 会获取不一致的互斥锁。EOWNWERDEAD 返回值表示出现不一致的互斥锁。
持有以前通过调用 pthread_mutex_lock() 获取的互斥锁时可调用 pthread_mutex_consistent_np()。
如果互斥锁的属主失败,则该互斥锁保护的临界段可能会处于不一致状态。在这种情况下,仅当互斥锁保护的临界段可保持一致时,才能使该互斥锁保持一致。
针对互斥锁调用 pthread_mutex_lock()、pthread_mutex_unlock() 和 pthread_mutex_trylock() 会以正常方式进行。
对于不一致或者未持有的互斥锁,pthread_mutex_consistent_np() 的行为是不确定的。
pthread_mutex_consistent_np() 在成功完成之后会返回零。其他任何返回值都表示出现了错误。
pthread_mutex_consistent_np() 会在出现以下情况时失败:
ENOSYS
描述:选项 _POSIX_THREAD_PRIO_INHERIT 未定义,或者该实现不支持 pthread_mutex_consistent_np()。
pthread_mutex_consistent_np() 可能会在出现以下情况时失败:
EINVAL
描述:mattr 属性值无效。