You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 17:20:26