Sto*_*row 1 linux mutex pthreads
我正在查看pthread_mutex_init两台 PC 上的手册页。
一个说:
如果成功,pthread_mutex_destroy() 和 pthread_mutex_init() 函数应返回零;应返回错误编号以指示错误。
另一个说:
pthread_mutex_init 始终返回 0。
哪个是真的?
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()可能会失败,返回错误代码)进行编程,因为它更易于移植。