单例class和线程安全

Singleton class and thread safety

class NumberStorage {
public:
    static NumberStorage& instance();
    double getNumber();
    void setNumber(double d);
private:
    NumberStorage() { number = 0.0; };
    double number;
};

NumberStorage& NumberStorage::instance()
{
    static NumberStorage instance;
    return instance;
}

我想我在某处读到过,以这种方式实现的 instance() 方法是线程安全的。这个对吗?我想我还必须在 getNumber() 和 setNumber() 中锁定成员变量 number?我该怎么做 (C++11)?

  1. C++11 编译器使该线程安全。静态变量只能由一个线程创建。
  2. 关于锁的其他问题都取决于线程应该如何与您的方法一起工作。如果您有多个线程可以使用同一块内存执行某些操作 - 使用锁。

简单锁可以与std::unique_lockstd::mutex一起使用:

void setNumber(double number) {
    static std::mutex _setNumberLock;
    std::unique_lock _lock(&_setNumberLock);

    // your code
}