2016-03-06 82 views
0

我已经看到关于这个问题的文章,但我仍然试图弄清楚。这种方式是否适合实施安全的singelton?我正在使用互斥体,静态成员并返回其引用。C++中的单线程 - 多线程问题

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

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

你不需要互斥。 –

+1

你打算如何创建需要调用'getInstance()'的实例? – juanchopanza

回答

2

是这样好吗用于实现安全singelton?

它是过冲。刚刚摆脱互斥的,写:

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

instance线程安全的创建得到保证,当函数被调用的第一时间。

+0

我正在使用visual studio 2010,那么我应该使用双锁或互斥锁?因为使用互斥锁似乎比双重锁定更方便和可读。谢谢 –

+0

@ErezShmaiel随着Visual Studio 2010,你没有C++ - 11访问。因此使用双重锁定。 –

+0

好的,所以只是为了确定:使用我写的互斥体不会是好方法,对吧? –