线程安全单例支架性能
Thread safety SingletonHolder performance?
在POCO框架中,SingletonHodler是一个用于管理sigleton对象的模板类。获取单例对象的方法是:
S* get()
/// Returns a pointer to the singleton object
/// hold by the SingletonHolder. The first call
/// to get will create the singleton.
{
FastMutex::ScopedLock lock(_m);
if (!_pS) _pS = new S;
return _pS;
}
问题是此方法始终使用互斥锁来确保在多线程环境中不会创建多个单一实例对象。我认为在第一次调用的方法时同步是合适的。如果我们在那之后同步,它会浪费资源。我知道双重检查锁定可以解决此问题,但它可能会损坏。
我的问题是POCO是否宁愿确保多线程环境中的安全性而不是节省资源?
跟随你的想法,没有什么能阻止你使用它,比如:
MySingleton* s = mySingletonHolder.get();
s->doSomething(); //no locking
...
s->doSomething(); //no locking
显然,如果你使用它总是像:
mySingletonHolder.get()->doSomthing();
...
mySingletonHolder.get()->doSomthing();
您将始终拥有头顶上的锁。
顺便说一句,如果您在多线程场景中使用单例实例,则应保证对doSomething()的调用是线程安全的。只做mySingletonHolder.get()->doSomthing();不能保证你。
相关文章:
- 为什么在单例中,检查类==空?
- C++ 实现模板单例类时出现链接错误
- 在类中存储单例的指针
- C++中的单例实现在调用 getInstance 函数时不会产生相同的类实例
- 具有非默认构造函数的单例类
- 使用 std::call_once 实现类似单例的功能
- 为什么单例使用指针而不是引用?
- 提升单例池release_memory vs purge_memory
- 具有 QObject 继承的单例 - Qt
- 单例类析构函数无法清理 (SDL_Quit) MinGW
- C++单例,不会为此文档加载任何符号
- 使用 CRTP 实现单例
- C++单例模板类使我的程序崩溃
- 初学者C++线程安全单例设计
- 派生类是单例是否是一种好的做法
- _CrtIsValidHeapPointer(块)错误在应用单例-帕特恩后退出主窗口时引发
- 在这种单例实施中,是否可以对两个商店重新排序?
- 这是MSVC 2013中具有共享PTR的单例的正确实现吗?
- 线程安全单例支架性能
- 单例模式性能问题