多线程编程指南

使互斥保持一致

如果某个互斥锁的属主失败,该互斥锁可能会变为不一致。

使用 pthread_mutex_consistent_np 可使互斥对象 mutex 在其属主停止之后保持一致。

pthread_mutex_consistent_np 语法

#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() 在成功完成之后会返回零。其他任何返回值都表示出现了错误。

pthread_mutex_consistent_np() 会在出现以下情况时失败:


ENOSYS

描述:

选项 _POSIX_THREAD_PRIO_INHERIT 未定义,或者该实现不支持 pthread_mutex_consistent_np()

pthread_mutex_consistent_np() 可能会在出现以下情况时失败:


EINVAL

描述:

mattr 属性值无效。