C++中静态函数调用返回局部静态对象的静态函数是否安全?
C++单例
GetInstance调用安全性分析 针对你给出的代码,结论是:在C++11及后续标准中,func1和func2调用A::GetInstance()是线程安全的。
核心原因
C++11标准明确规定,函数内的局部静态变量初始化过程由编译器负责保证线程安全:
- 当多个线程首次同时进入
GetInstance函数时,只会有一个线程执行static A a_ins;的初始化逻辑,其他线程会阻塞等待初始化完成,不会触发多次实例构造。 - 后续所有对
GetInstance的调用,都会直接返回已初始化完成的a_ins引用,不存在竞争问题。
需要注意的例外情况
- 如果代码基于C11之前的标准(如C03),局部静态变量的初始化没有线程安全保障,多线程调用
GetInstance可能导致A被多次构造,引发线程安全问题。 - 另外,
xx_func和yy_func自身的线程安全性需要由你自行保证——单例实例的访问安全不包含成员函数内部的业务逻辑安全。
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

