int pthread_mutex_init的设置互斥锁的强健属性
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了int pthread_mutex_init的设置互斥锁的强健属性相关的知识,希望对你有一定的参考价值。
参考技术Apthread_mutexattr_setrobust_np(3C)可用来设置互斥锁属性对象的强健属性。
pthread_mutexattr_setrobust_np 语法
#include <pthread.h>
int pthread_mutexattr_setrobust_np(pthread_mutexattr_t *attr, int *robustness);
注 –仅当定义了符号 _POSIX_THREAD_PRIO_INHERIT 时,pthread_mutexattr_setrobust_np() 才适用。
attr 指示以前通过调用 pthread_mutexattr_init() 创建的互斥锁属性对象。
robustness 定义在互斥锁的属主失败时的行为。pthread.h 中定义的 robustness 的值为 PTHREAD_MUTEX_ROBUST_NP 或 PTHREAD_MUTEX_STALLED_NP。缺省值为 PTHREAD_MUTEX_STALLED_NP。
PTHREAD_MUTEX_ROBUST_NP 如果互斥锁的属主失败,则以后对 pthread_mutex_lock() 的所有调用将以不确定的方式被阻塞。 PTHREAD_MUTEX_STALLED_NP互斥锁的属主失败时,将会解除锁定该互斥锁。互斥锁的下一个属主将获取该互斥锁,并返回错误 EOWNWERDEAD。 注 –应用程序必须检查 pthread_mutex_lock() 的返回代码,查找返回错误 EOWNWERDEAD 的互斥锁。互斥锁的新属主应使该互斥锁所保护的状态保持一致。如果上一个属主失败,则互斥锁状态可能会不一致。 如果新属主能够使状态保持一致,请针对该互斥锁调用 pthread_mutex_consistent_np(),并解除锁定该互斥锁。 如果新属主无法使状态保持一致,请勿针对该互斥锁调用 pthread_mutex_consistent_np(),而是解除锁定该互斥锁。 所有等待的线程都将被唤醒,以后对 pthread_mutex_lock() 的所有调用都将无法获取该互斥锁。返回代码为 ENOTRECOVERABLE。通过调用 pthread_mutex_destroy() 取消对互斥锁的初始化,并调用 pthread_mutex_int() 重新初始化该互斥锁,可使该互斥锁保持一致。如果已获取该锁的线程失败并返回 EOWNERDEAD,则下一个属主获取该锁时将返回代码 EOWNERDEAD。
pthread_mutexattr_setrobust_np 返回值
如果成功完成,pthread_mutexattr_setrobust_np() 会返回 0。其他任何返回值都表示出现了错误。
如果出现以下任一情况,pthread_mutexattr_setrobust_np() 将失败并返回对应的值。
ENOSYS 描述: 选项 _POSIX_THREAD_PRIO__INHERIT 未定义,或者该实现不支持 pthread_mutexattr_setrobust_np()。 ENOTSUP 描述: robustness 指定的值不受支持。 pthread_mutexattr_setrobust_np() 可能会在出现以下情况时失败:
EINVAL 描述: attr 或 robustness 指定的值无效。
man pthread_mutex_init 或 man pthread_mutex_lock 没有结果的解决的方法
问题:
在刚装好的 Mint/Ubuntu 可能会出现 man pthread_mutex 相关的函数没结果,
报No manual entry for pthread_mutex_init 的错误。例如以下图
解决的方法:
安装manpages:manpages-posix-dev
Mint/Ubuntu:sudo apt-get install manpages-posix-dev
结果:
再man下试试吧
以上是关于int pthread_mutex_init的设置互斥锁的强健属性的主要内容,如果未能解决你的问题,请参考以下文章
int pthread_mutex_init的获取互斥锁的范围
ubuntu没有man pthread_mutex_init
ubuntu下 pthread_mutex_init man中查不到