如何解决pthread_mutex_init是否总是返回0?
我正在两台PC上查看pthread_mutex_init
手册页。
有人说:
如果成功,则pthread_mutex_destroy()和pthread_mutex_init()函数应返回零;否则,返回0。将返回错误编号以指示错误。
另一个说:
pthread_mutex_init始终返回0。
哪个是真的?
解决方法
POSIX线程API(也称为“ pthreads”)已标准化为(自然)POSIX的一部分。 Its current specifications for pthread_mutex_init()
部分说:
如果成功,则
pthread_mutex_destroy()
和pthread_mutex_init()
函数应返回零;否则,错误号为 返回以指示错误。
与您引用的第一个声明相同。规范继续描述了要求失败的pthread_mutex_init()
和允许失败的一种特殊情况。就POSIX而言,pthread_mutex_init()
实际上可能会失败,并返回错误号。自从发布这些规范的初始版本以来,详细信息仅发生了很小的变化-POSIX的发布版本都没有说pthread_mutex_init()
始终返回0。
但是POSIX正在指定一个API,但没有记录该API的具体实现。 pthread有几种实现,每种都有许多版本。实际上,在其中某些情况下,pthread_mutex_init()
可能或必须失败的任何情况都不会发生,并且这种实现的文档证明就像您的第二引号一样,是正确的。 pthread_mutex_init()
始终返回0(因为它永远不会失败)。
因此,这两个主张不是互相排斥的,但是它们并不一定在谈论完全相同的事情。 POSIX记录了所有符合实现的情况中可以预期并必须容纳的行为,而后一种主张必须被解释为记录一个特定实现的行为。
明智的做法是为两者中的更通用的语言进行编程(pthread_mutex_init()
可能会失败,并返回错误代码),因为这更具可移植性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。