【发布时间】:2021-10-31 09:21:45
【问题描述】:
C 库的许多函数都明确标记为线程安全或非线程安全。例如,当我查看gmtime(3) 的手册时,有一个很好的表格显示了这些函数中哪些是线程安全的,哪些不是。
查看stat(2) 函数的手册页,它并没有说任何一种方式。除非另有说明,否则函数是否应该是线程安全的?
阅读POSIX Safety Concept 并没有真正清楚地说明未标记为不安全的函数是安全的。也许我在某个地方漏掉了一句话?
【问题讨论】:
-
以
_r结尾的函数是线程安全的。例如,gmtime不是线程安全的,因为它返回一个指向可以被不同线程覆盖的公共/隐藏全局的指针。但是,gmtime_r是 线程安全的,因为它返回的指针是您传递给它的第二个参数。假设你向它传递一个对每个线程都是唯一的指针(例如,指向堆栈上的一个变量)。 -
@CraigEstey 是的。它在
gmtime手册页中有明确记录,而对于stat()函数,什么也没有。因此,正如 Barmar 下面提到的,POSIX 中肯定有一个默认值。
标签: c multithreading posix libc