/
githubmirror
/
CPlusPlusThings
Обзор
Документация
Войти
/
githubmirror
/
CPlusPlusThings
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
design_pattern/singleton/barrier_singleton.cpp
45 строк
836 B
zhangxing
support bazel complie this project and format code.
30 мар 2024, 17:00
30 мар 2024, 17:00
3c8a3f2
Код
Авторство
О чём код?
// // Created by light on 20-2-7. // #include <iostream> using namespace std; #include <mutex> #define barrier() __asm__ volatile("lwsync") // method 1 operator new + placement new // singleton *instance() { // if (p == nullptr) { // lock_guard<mutex> guard(lock_); // if (p == nullptr) { // singleton *tmp = static_cast<singleton *>(operator // new(sizeof(singleton))); new(p)singleton(); p = tmp; // } // } // return p; //} class singleton { private: singleton() {} static singleton *p; static mutex lock_; public: static singleton *instance(); }; singleton *singleton::p = nullptr; singleton *singleton::instance() { if (p == nullptr) { lock_guard<mutex> guard(lock_); barrier(); if (p == nullptr) { p = new singleton(); } } return p; }