OS X上C标准库的线程安全
MacOSX的C标准库实现中是否有线程安全的函数的明确列表 关于OS X上C标准库的线程安全,c,macos,thread-safety,standard-library,C,Macos,Thread Safety,Standard Library,MacOSX的C标准库实现中是否有线程安全的函数的明确列表 关于glibc和f*()函数,有一个很好的答案,但是我没有找到任何关于OS X的资源。有这样的东西吗 例如,strtime()和strftime()是线程安全的吗printf()?这些可能有我不想弄糟的内部缓冲区 任何似乎具有某种神奇记忆能力的函数都不可能是线程安全的。任何函数如果返回一个您不希望使用的指针free(),通常都不是线程安全的 许多函数确实需要担心返回char*,或struct foo*。虽然这不是一个完美的规则,但这通常
glibc
和f*()
函数,有一个很好的答案,但是我没有找到任何关于OS X的资源。有这样的东西吗
例如,
strtime()
和strftime()
是线程安全的吗<代码>printf()?这些可能有我不想弄糟的内部缓冲区 任何似乎具有某种神奇记忆能力的函数都不可能是线程安全的。任何函数如果返回一个您不希望使用的指针free()
,通常都不是线程安全的
许多函数确实需要担心返回char*
,或struct foo*
。虽然这不是一个完美的规则,但这通常表示函数具有某种静态存储,并且不是线程安全的
strtok()
是is的一个简单示例,并已被线程安全的strtok\u r()
所取代。对于许多非线程安全函数,存在一个函数\u r() 单一Unix规范给出了(除了“遗留功能组”中的函数允许是非线程安全的,尽管没有列出)。该列表包括Dave在回答中提到的strtok()
,但不包括strtime()
,也不包括strftime()
,也不包括printf()
在回答一个与此非常类似的问题时,OSX确实支持规范的上述方面,因此我认为这可能是最好的使用列表。(顺便说一句,您可能还对该问题的其余部分以及其他答案感兴趣。)作为旁白(Dave和ruakh给出了答案),即使某些标准函数被保证是线程安全的,但它的实现通常会带来高性能的损失。像printf
这样的东西是出了名的糟糕,因为它们有序列化代码的倾向。