OS X上C标准库的线程安全性

时间:2011-12-05 00:30:51

标签: c macos thread-safety standard-library

Mac OS X的C标准库实现中是否存在线程安全的函数列表?

关于glibcf*()函数,有一个很好的答案here,但我没有找到任何关于OS X的资源。是否有这样的事情?

例如,strptime()strftime()线程安全吗? printf()?这些可能有内部缓冲区,我不想搞砸。 :)

2 个答案:

答案 0 :(得分:3)

Single Unix规范给出了a fairly short list of functions that are allowed to be non–thread-safe(除了“Legacy Feature Group”中的函数被允许是非线程安全的,尽管没有在那里列出)。该列表包含strtok(),Dave在其回答中提及,但包括strptime()strftime()printf()

This StackOverflow answer断言,在回答与此问题非常相似的问题时,OS X确实支持规范的上述方面,所以我认为这可能是最好的列表。 (顺便说一下,你可能也会对这个问题的其余部分感兴趣,而对另一个问题感兴趣。)

答案 1 :(得分:2)

任何似乎具有一些神奇记忆力的功能都可能不是线程安全的。 <= 1}}返回指针的任何函数都经常不是线程安全的。

您真正需要担心的许多功能都会返回free()char*。虽然这不是一个完美的规则,但这通常表示某种功能具有某种静态存储,并且不是线程安全的。

struct foo*是一个简单的例子,并且由strtok()继承,它是线程安全的。对于许多非线程安全的函数,存在strtok_r()(r为reentrant)。

相关问题