C++ (Qt)int a = 0;...a = 1;
C++ (Qt)int abortFlag = 0; // thread 1 while (!abortFlag) { ....} // thread 2 (main) abortFlag = 1;// thread1.joint();
C++ (Qt)Singleton* Singleton::instance () { Singleton* tmp = pInstance; ...// insert memory barrier if(tmp == 0) { Lock lock; tmp = pInstance; if (tmp == 0) { tmp = new Singleton; ...// insert memory barrier pInstance = tmp; } } return tmp;}
C++ (Qt)std::atomic_thread_fence(std::memory_order_acquire);
C++ (Qt)if (!m_instance) { std::unique_lock<std::mutex> l(m_mutex); if (!m_instance) { auto temp = new Singleton(); if (temp) m_instance = temp; }}return m_instance;