首页 > 解决方案 > pthread_mutex_init 总是返回 0 吗?

问题描述

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

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

另一个说:

pthread_mutex_init 始终返回 0。

哪个是真的?

标签: linuxpthreadsmutex

解决方案


POSIX 线程 API,又名“pthreads”被标准化为(自然)POSIX 的一部分。 它目前的规格pthread_mutex_init()部分说:

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

这与您引用的第一个声明相同。规范继续描述了几种需要失败的特定情况,以及pthread_mutex_init()允许失败的一种情况。就 POSIX 而言,那么,确实会失败,返回一个错误号。自从这些规范的初始版本发布以来,细节只发生了轻微的变化——没有发布的 POSIX 版本说总是返回 0。pthread_mutex_init()pthread_mutex_init()

但是 POSIX 指定了一个 API,而不是记录该 API 的具体实现。pthread 有多种实现,每种都有许多版本。有可能在其中一些情况下,pthread_mutex_init()可能或必须失败的条件实际上都不会出现,并且这种实现的文档不会像您的第二个报价那样声称pthread_mutex_init()总是返回 0 不正确(因为它永远不会失败)。

因此,这两种说法并不相互排斥,但它们不一定在谈论完全相同的事情。POSIX 记录了可以预期的行为,并且必须在所有符合实现的范围内适应,而后一种声明必须解释为记录一个特定实现的行为。

您最好为两者中更通用的一种(pthread_mutex_init()可能会失败,返回错误代码)进行编程,因为它更便携。


推荐阅读