pthread_mutex_init 是否总是返回 0?

Sto*_*row 1 linux mutex pthreads

我正在查看pthread_mutex_init两台 PC 上的手册页。
一个说:

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

另一个说:

pthread_mutex_init 始终返回 0。

哪个是真的?

Joh*_*ger 5

POSIX 线程 API,又名“pthreads”被标准化为(自然地)POSIX 的一部分。 它目前的规格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()可能会失败,返回错误代码)进行编程,因为它更易于移植。