pthread_mutex_init是否总是返回0?

我正在两台PC上查看pthread_mutex_init手册页。
有人说:

如果成功,则pthread_mutex_destroy()和pthread_mutex_init()函数应返回零;否则,返回0。将返回错误编号以指示错误。

另一个说:

pthread_mutex_init始终返回0。

哪个是真的?

iCMS 回答: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()可能会失败,并返回错误代码),因为这更具可移植性。

本文链接:https://www.f2er.com/1714630.html

大家都在问