pthread_mutexattr_getrobust 和 pthread_mutexattr_setrobust 子例程

用途

获取并设置互斥属性对象的 鲁棒 属性。

线程库 (libpthreads.a)

语法

#include <pthread.h>
int pthread_mutexattr_getrobust(const pthread_mutexattr_t *restrict attr, int *restrict robust);
int pthread_mutexattr_setrobust(pthread_mutexattr_t *attr, int  robust);

描述

pthread_mutexattr_getrobust 子例程从 attr 参数指定的属性对象获取 鲁棒 属性的值。 pthread_mutexattr_setrobust 子例程在由 attr 参数指定的已初始化属性对象中设置 鲁棒 属性的值。

鲁棒 属性可以具有值 PTHREAD_MUTEX_停摆PTHREAD_MUTEX_鲁棒,并且这些值在 pthread.h 头文件中定义。 缺省值为 PTHREAD_MUTEX_停摆

当保存互斥对象的线程在 鲁棒 属性设置为 PTHREAD_MUTEX_停摆时终止,并且另一个线程尝试获取互斥对象时,不会执行任何操作。

当包含互斥对象的线程在 鲁棒 属性设置为 PTHREAD_MUTEX_鲁棒时终止,并且 process-shared 属性设置为 PTHREAD_PROCESS_SHARED时,尝试获取互斥对象的下一个线程将收到有关终止的通知。 通知的线程将成为新的互斥对象所有者,并且互斥对象的受保护状态现在标记为不一致。

当鲁棒互斥对象的受保护状态不一致时,可以使用 pthread_mutex_consistent 子例程将鲁棒互斥对象的受保护状态标记为一致。

当鲁棒互斥对象的受保护状态不一致时,调用 pthread_mutex_unlock 子例程而不调用 pthread_mutex_consistent 子例程时,会将鲁棒互斥对象的受保护状态标记为永久不可用。 在这种情况下,对 pthread_mutex_destroy 子例程的调用是对健壮互斥的唯一允许操作。

参数

描述
attr 指定互斥属性对象。
健壮 指示用于存储 鲁棒 属性值的对象。

返回值

成功完成时, pthread_mutexattr_setrobust 子例程返回值 0 (0)。 否则,将返回错误代码以指示错误。

成功完成时, pthread_mutexattr_getrobust 子例程返回值零 (0)。 子例程将 attr 参数的 鲁棒 属性的值存储到由 鲁棒 属性指定的对象中。 否则,将返回错误代码以指示错误。

错误代码

pthread_mutexattr_getrobust 子例程或 pthread_mutexattr_setrobust 子例程可能由于以下错误而失败:

描述
EINVAL attr 参数指定的值无效。 对于 pthread_mutexattr_setrobust 子例程,此错误代码还可能表示为鲁棒属性指定的新值超出允许值的范围。

pthread_mutexattr_getrobust 子例程或 pthread_mutexattr_setrobust 子例程不返回 EINTR 错误代码。