stat(2)系统调用是否为线程安全的?
C标准库函数线程安全标注规则说明
- POSIX 标准有明确的默认约定:所有没有被明确标注为线程不安全的函数,默认都是线程安全的,你之前查阅文档时遗漏了规则前置的默认约定部分。
stat类系统调用封装函数本身就是线程安全的:它的所有输入参数都由调用方传入,返回结果也写入调用方提供的内存空间,不存在内部共享的静态存储结构,不存在多线程调用互相干扰的风险,因此不需要额外标注安全属性。- 只有存在线程安全风险的函数才会被专门标注:例如
gmtime这类函数依赖内部静态结构体存储返回结果,多个线程同时调用会覆盖该静态区域的数据,导致结果异常,所以手册会专门标注它的非线程安全属性,同时提供带用户传入缓冲区的gmtime_r线程安全版本。
GNU C库的安全标注同样采用例外列举机制,仅在手册中说明函数存在的不安全场景,没有特殊标注的函数默认满足 MT-Safe(多线程安全)等级。
内容的提问来源于stack exchange,提问作者Alexis Wilke
相关产品推荐
相关产品推荐

