1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| #include<iostream> #include<thread> #include<mutex> #include"stdlib.h" using namespace std; std::mutex m;
class Singleton{ private: Singleton(){}; static Singleton* instance; public: int data = 1; static Singleton* getInstance(); private: class Deletor { public: ~Deletor() { cout<<"now in the Deletor function"<<endl; if(Singleton::instance != NULL) delete Singleton::instance; } }; static Deletor deletor; };
Singleton::Deletor Singleton::deletor;
Singleton* Singleton::instance = NULL; Singleton* Singleton::getInstance() { cout<<"DEBUG: now in getInstance "<<endl; if(instance == NULL){ m.lock(); if(instance == NULL){ instance = new Singleton; } m.unlock(); } cout <<"the address of instance " << Singleton::instance<<endl; return instance; }
void test(){ cout<<"Hello world"<<endl; }
Singleton* GetInstance(){ return Singleton::getInstance(); }
int main() {
for(int i = 0 ;i<500 ; i++) { thread th(GetInstance); th.join(); }
cout<<"LOG: end of main"<<endl;
}
|