在 C++11 及之后,“局部靜態變量懶漢”(Meyers’ Singleton)不需要自己加鎖,標準已經幫你做好了線程安全。
Singleton& getInstance() {static Singleton inst; // ← 這一句并發時只會初始化一次return inst;
}
- 首次調用時,由編譯器在底層加鎖(通常是無鎖雙檢 + 原子標志,或直接用 pthread_once );
- 后續調用無鎖直接返回引用;
- C++03 及更早版本沒有這條保證,需要手動加鎖。
- C++11 起,局部靜態變量懶漢就是官方推薦的線程安全單例寫法,無需額外加鎖。