【问题标题】:Singleton - multithreaded issue in C++ [duplicate]Singleton - C++中的多线程问题[重复]
【发布时间】:2016-03-06 13:50:01
【问题描述】:

我已经看到有关此问题的帖子,但我仍在努力解决。这种方式可以实现安全的单例吗?我正在使用互斥锁、静态成员并返回它的引用。

#include <mutex>
using namespace std;
mutex mtx;

class MySingleton {
private:
    MySingleton();
public:
    MySingleton& getInstance() {
        mtx.lock();
        static MySingleton instance;
        mtx.unlock();
        return instance;
    }
};

【问题讨论】:

  • 你不需要互斥体。
  • 你将如何创建你需要调用getInstance()的实例?

标签: c++ multithreading static singleton mutex


【解决方案1】:

这种方式可以实现安全单例吗?

过冲了。只需摆脱互斥体并编写:

static MySingleton& getInstance() {
    static MySingleton instance;
    return instance;
}

在第一次调用函数时保证instance的线程安全创建。

【讨论】:

  • 我用的是visual studio 2010,那我应该用双锁还是互斥锁?因为使用互斥锁似乎比双重锁定更方便和可读。谢谢
  • @ErezShmiel 使用 Visual Studio 2010,您没有 c++-11 访问权限。因此使用双重锁定。
  • 好的,所以请确定:使用我写的互斥锁不是好方法,对吧?
  • @ErezShmiel 它对static MySingleton instance; 声明没有影响。
  • 这个方法不应该声明static吗?
猜你喜欢
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-06
  • 2019-01-19
相关资源
最近更新 更多