2016-03-06 79 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

好的,所以只是爲了確定:使用我寫的互斥體不會是好方法,對吧? –