On Monday, June 6, 2016 at 7:35:07 AM UTC-4, Jeffrey Walton wrote: > > Hi Everyone, > > Crypto++ provides a Singleton class in misc.h. The original class suffered > C++03 (and earlier) shortcomings. A design compromise was made to leak > memory rather than using locks to increase portability. > > We now have a portable implementation that does not depend on non-portable > locks. It follows > http://preshing.com/20130930/double-checked-locking-is-fixed-in-cpp11. > > template <class T, class F, int instance> > const T & Singleton<T, F, instance>::Ref(CRYPTOPP_NOINLINE_DOTDOTDOT) const > { > static std::mutex s_mutex; > static std::atomic<T*> s_pObject; > > T *p = s_pObject.load(std::memory_order_relaxed); > std::atomic_thread_fence(std::memory_order_acquire); > > if (p) > return *p; > > std::lock_guard<std::mutex> lock(s_mutex); > p = s_pObject.load(std::memory_order_relaxed); > std::atomic_thread_fence(std::memory_order_acquire); > > if (p) > return *p; > > T *newObject = m_objectFactory(); > s_pObject.store(newObject, std::memory_order_relaxed); > std::atomic_thread_fence(std::memory_order_release); > > return *newObject; > } > > The implementation is guarded by both CRYPTOPP_CXX11_ATOMICS and > CRYPTOPP_CXX11_SYNCHRONIZATION because atomics is not a proper subset of > synchronization when it comes to compiler support and versions. > > I'd like to merge it once it goes through a round of testing. > > Are there any objections? >
Committed at http://github.com/weidai11/cryptopp/commit/e961c2da5b002c6e8601d88546e54c544794fdfd -- -- You received this message because you are subscribed to the "Crypto++ Users" Google Group. To unsubscribe, send an email to [email protected]. More information about Crypto++ and this group is available at http://www.cryptopp.com. --- You received this message because you are subscribed to the Google Groups "Crypto++ Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
