一、先给一句话总览
env和locale并不是“函数线程安全不安全”,
而是说:这些函数依赖一个“全局可变对象”,
只要这个对象在多线程运行期间不被修改,它们就是安全的。
二、背景:glibc 的 MT-Safety 注解体系
glibc 文档把函数分成几类:
MT-Safe:多线程下可并发调用
MT-Unsafe:多线程下不安全
MT-Safe (locale)/MT-Safe (env):
条件安全 —— 前提是相关全局对象不被修改
locale和env就是这种“条件安全”的附加说明。