Creating a thread-safe C++ Singleton Instance with TBB
C++11から、static変数の初期化がスレッドセーフになったので、もはやシングルトンの実装に排他処理は必要ないのですが、いちおう技術的な資料として引用します。
class Singleton { static tbb::atomic<Singleton *> inst; int x; int y; Singleton(): x(10), y(20) { } public: int getX() { return x; } int getY() { return y; } static Singleton& getInst() { if (inst == 0) { Singleton* temp = new Singleton(); if (inst.compare_and_swap(temp, NULL) != NULL) { delete temp; } } return *inst; } }; tbb::atomic<Singleton *> Singleton::inst; int _tmain(int argc, _TCHAR* argv[]) { cilk_for(int i=0; i<8; i++) { Singleton s = Singleton.getInst(); cout << s.getX(); } }