c++ - 单例类和线程安全

标签 c++ multithreading 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. 关于锁的其他问题都取决于线程应该如何与您的方法一起工作。如果您有多个线程可以使用同一 block 内存执行某些操作 - 使用锁。

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

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

    // your code
}

关于c++ - 单例类和线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30757297/

相关文章:

java - spring TransactionTemplate 和 SimpleJdbcTemplate 是线程安全的吗?

c# - 不可变类型的实例如何本质上是线程安全的

c++ - 使用 Visual C++ 2010 嵌入 v8

c++ - 在 C++ dll 中查找外部调用

c++ - WH_CALLWNDPROCRET 的问题

c# - 尝试根据用户的选择启动线程

.net - 如何在不使用锁的情况下在 .Net 中设置最小值?

java - 使用IMAPI 2.0监视刻录进度并将更新传递给Java

multithreading - 多核处理器的关键部分

java - 无状态 session bean 中的多线程?