Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OS X上C标准库的线程安全_C_Macos_Thread Safety_Standard Library - Fatal编程技术网

OS X上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*。虽然这不是一个完美的规则,但这通常

MacOSX的C标准库实现中是否有线程安全的函数的明确列表

关于
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
这样的东西是出了名的糟糕,因为它们有序列化代码的倾向。