Mac OS X的C标准库实现中是否存在线程安全的函数列表?
关于glibc
和f*()
函数,有一个很好的答案here,但我没有找到任何关于OS X的资源。是否有这样的事情?
例如,strptime()
和strftime()
线程安全吗? printf()
?这些可能有内部缓冲区,我不想搞砸。 :)
答案 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)。