先看下示例:
StudentManager &StudentManager::GetInstance()
{
static StudentManager manager;
return manager;
}
1. 如何保证线程安全性
C++ 11标准中新增了一个特性叫Magic Static:
If control enters the declaration concurrently while the variable is being initialized, the concurrent execution shall wait for completion of the initialization.
如果当变量在初始化的时候,并发同时进入声明语句,并发线程将会阻塞等待初始化结束。
这样的话后进入的并发线程一定会阻塞到变量完成初始化后才继续执行,保证了线程安全性。
2. 优点和好处
2.1 延迟加载
静态局部变量在程序执行到该对象的声明处时被首次初始化,可以防止程序在启动时因加载和初始化东西太多而启动过慢。
2.2 实现简单
只需两行代码就实现了一个恶汉式的单例,同时又能保证线程安全。
网友评论