Example #1
0
        static T& instance()
        {
            T * tmp = pInstance_.load(std::memory_order_acquire);
            if (tmp == nullptr)
            {
                std::lock_guard<std::mutex> lock(mutex_);
                tmp = pInstance_.load(std::memory_order_relaxed);
                if (tmp == nullptr)
                {
                    if (destroyed_)
                    {
                        destroyed_ = false;
                        onDeadReference();
                    }
                    else
                    {
                        tmp = CreatePolicy<T>::create();
                        pInstance_.store(tmp, std::memory_order_release);
#ifndef MAPNIK_NO_ATEXIT
                        // register destruction
                        std::atexit(&DestroySingleton);
#endif
                    }
                }
            }
            return *tmp;
        }
Example #2
0
        static T& instance()
        {
            if (! pInstance_)
            {
#ifdef MAPNIK_THREADSAFE
                mapnik::scoped_lock lock(mutex_);
#endif
                if (! pInstance_)
                {
                    if (destroyed_)
                    {
                        destroyed_ = false;
                        onDeadReference();
                    }
                    else
                    {
                        pInstance_ = CreatePolicy<T>::create();

                        // register destruction
                        std::atexit(&DestroySingleton);
                    }
                }
            }
            return *pInstance_;
        }
Example #3
0
        PhoenixSingleton* getInstance()
        {
            if(!pInstance_)
            { if(isDestroyed_) onDeadReference(); }
            else createInstance();

            return pInstance_;
        }