gpt4 book ai didi

pthreads - PTHREAD_MUTEX_* 和 PTHREAD_MUTEX_ERRORCHECK 是否互斥?

转载 作者:行者123 更新时间:2023-12-04 04:33:21 25 4
gpt4 key购买 nike

Open Group 有一个规范 pthread_mutex_lock , pthread_mutex_trylock , pthread_mutex_unlock和 friend 位于here .

该页面列出了四个互斥锁属性值:PTHREAD_MUTEX_NORMAL , PTHREAD_MUTEX_ERRORCHECK , PTHREAD_MUTEX_RECURSIVE , 和 PTHREAD_MUTEX_DEFAULT .

所有的值都是互斥的吗?在调试配置中,我们是否允许 OR那些值(value)观在一起?例如,我希望在 Debug 中进行完整的错误检查,PTHREAD_MUTEX_ERRORCHECK | PTHREAD_MUTEX_RECURSIVE 也是如此。一个有效的配置?

我问的原因是我发现了一个错误 pthread_mutexattr_settype .我不确定它是否有效配置和 OS X 实现错误;或者如果它是无效的配置和预期的标准行为。如果是 OS X 错误,我仍然可以在其他平台上的调试配置中享受增强的错误检查。

最佳答案

互斥锁只能是一种“类型”。你不能把它们结合起来。

无论如何,这样做真的没有意义 - PTHREAD_MUTEX_ERRORCHECK如果您尝试重新锁定已被同一线程锁定的互斥锁,则互斥锁总是返回错误,而 PTHREAD_MUTEX_RECURSIVE在这种情况下互斥总是成功的。在其他错误检查情况下(解锁另一个线程锁定的互斥锁,以及解锁未锁定的互斥锁)PTHREAD_MUTEX_ERRORCHECKPTHREAD_MUTEX_RECURSIVE具有相同的行为(总是返回错误)。

这意味着您的 PTHREAD_MUTEX_RECURSIVE互斥体应该在“调试”版本中保持相同的类型,但替换 PTHREAD_MUTEX_ERRORCHECK 可能是有意义的。为 PTHREAD_MUTEX_DEFAULTPTHREAD_MUTEX_NORMAL互斥体。

关于pthreads - PTHREAD_MUTEX_* 和 PTHREAD_MUTEX_ERRORCHECK 是否互斥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20181656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com