在 C++11 及之后,“局部静态变量懒汉”(Meyers’ Singleton)不需要自己加锁,标准已经帮你做好了线程安全。
Singleton& getInstance() {static Singleton inst; // ← 这一句并发时只会初始化一次return inst;
}
- 首次调用时,由编译器在底层加锁(通常是无锁双检 + 原子标志,或直接用 pthread_once );
- 后续调用无锁直接返回引用;
- C++03 及更早版本没有这条保证,需要手动加锁。
- C++11 起,局部静态变量懒汉就是官方推荐的线程安全单例写法,无需额外加锁。