小编Wei*_*Sun的帖子

c ++单例实现迈耶的vs call_once

好吧,我在自己的项目中使用单例。最常用的单例实现可能是Meyer的单例,也可能是使用std :: call_once或pthread_once的单例。两者对于并行计算都是线程安全的

//Meyer's singleton
class MySingleton{
public:
  static MySingleton& getInstance(){
    static MySingleton instance;
    // volatile int dummy{};
    return instance;
  }
private:
  MySingleton()= default;
  ~MySingleton()= default;
  MySingleton(const MySingleton&)= delete;
  MySingleton& operator=(const MySingleton&)= delete;

};


//with call_once
class MySingleton{
public:
  static MySingleton& getInstance(){
    std::call_once(initInstanceFlag, &MySingleton::initSingleton);
    // volatile int dummy{};
    return *instance;
  }
private:
  MySingleton()= default;
  ~MySingleton()= default;
  MySingleton(const MySingleton&)= delete;
  MySingleton& operator=(const MySingleton&)= delete;

  static MySingleton* instance;
  static std::once_flag initInstanceFlag;

  static void initSingleton(){
    instance= new MySingleton;
  }
};

MySingleton* MySingleton::instance= nullptr; …
Run Code Online (Sandbox Code Playgroud)

c++ parallel-processing singleton

6
推荐指数
1
解决办法
91
查看次数

标签 统计

c++ ×1

parallel-processing ×1

singleton ×1