【问题标题】:C++ Threadsafe Singleton (NOT FOR INIT)C++ 线程安全单例(不适用于初始化)
【发布时间】:2009-11-11 03:23:32
【问题描述】:

所以我想从多个线程访问一个单例类。从概念上讲,我认为在这个单例实例上调用非常量方法不是线程安全的。我一直在网上寻找,似乎没有人解决这个可能的问题。这是否存在实际问题,Singleton 的线程安全的唯一问题是实例变量的初始化吗?

【问题讨论】:

    标签: c++ multithreading singleton


    【解决方案1】:

    单例实例与任何其他实例具有相同的线程安全问题,因此对其方法的调用或对其成员的访问应该同步。

    单例本身的初始化是另一个问题...在 gcc 中静态初始化是threadsafe,但在其他平台上可能没有那么多。

    还可以看看这个paper 解决了 Andrei Alexandrescu 的一些线程单例问题。他的 Modern C++ Design book 还解决了单例问题。

    【讨论】:

      【解决方案2】:

      你是对的,调用非常量方法或依赖于实例数据的方法,可以被其他线程修改。

      【讨论】:

        【解决方案3】:

        除了初始化实例变量的线程安全问题外,在方法调用的线程安全方面,单例对象应该被视为任何其他普通对象。

        ie,多线程访问的单例对象的任何方法(如果我们试图读取一个变量的值,该变量的值将由另一个线程在另一个方法中更新,则您也需要对 const 方法进行同步)并涉及在共享数据中读写必须同步。

        【讨论】:

          猜你喜欢
          • 2010-11-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-31
          • 1970-01-01
          • 2021-09-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多