我具有存儲在一個單獨的類我的應用程序的結構,這樣的(簡化):多線程單例:實例方法是否需要互斥鎖?
class Conf
{
Conf();
Conf(const Conf&);
Conf& operator=(const Conf&);
~Conf();
public:
static Conf& instance()
{
static Conf singleton;
return singleton;
};
static void setProperty(const std::string& name,
const std::string& value);
static std::string getProperty(const std::string& name);
private:
QMutex _mutex;
std::map<std::string, std::string> _properties;
};
因爲配置類可以從許多線程訪問,我使用互斥用於同步:
void Conf::setProperty(const std::string& name,
const std::string& value)
{
QMutexLocker(&Conf::instance()._mutex);
Conf::instance()._properties[name]=value;
}
std::string Conf::getProperty(const std::string& name)
{
QMutexLocker(&Conf::instance()._mutex);
return Conf::instance()._properties[name];
}
Conf::instance()
方法是否也需要鎖定?
我發現了類似的問題:does a getter function need a mutex?, 但在我的情況下,沒有setter方法(讓我們假設在線程啓動之前創建單例實例)。
在C++ 11instance()
您可以給出您對C++ 11的自動線程安全聲明的引用。 – doron
@doron如此補充。 –
很酷。你每天學習新的東西。 – doron