99 static std::atomic<int> semaphore{ 1 };
100 LASS_LOCK_INTEGRAL(semaphore)
102 deathRow_.push(singleton);
105 static SingletonGuard* instance()
107 static std::atomic<SingletonGuard*> neo{
nullptr };
108 static std::atomic<int> semaphore{ 1 };
110 if (deadReference(
false))
112 std::cerr <<
"[LASS RUN MSG] UNDEFINED BEHAVIOUR: Usage of dead reference to SingletonGuard!" << std::endl;
116 SingletonGuard* one = neo.load(std::memory_order_acquire);
119 LASS_LOCK_INTEGRAL(semaphore)
121 one = neo.load(std::memory_order_relaxed);
124 one =
new SingletonGuard;
125 ::atexit(&SingletonGuard::killEmAll);
126 neo.store(one, std::memory_order_release);
143 while (!deathRow_.empty())
147 delete deadManWalking;
150 static void killEmAll()
153 LASS_ASSERT(!deadReference(
false));
156 static bool deadReference(
bool setReferenceToDead)
158 static std::atomic<int> dead{
false };
159 if (setReferenceToDead)
161 dead.store(
true, std::memory_order_release);
166 return dead.load(std::memory_order_acquire);