diff --git a/src/core/impl/utils/thread.cpp b/src/core/impl/utils/thread.cpp index b8104983..f6f72c24 100644 --- a/src/core/impl/utils/thread.cpp +++ b/src/core/impl/utils/thread.cpp @@ -18,6 +18,12 @@ using namespace mgb; #if MGB_THREAD_SAFE const std::thread::id RecursiveSpinlock::sm_none_owner = std::thread::id(); +//! why not use initializer_list for global var, detail: +//! MGE-1738 +RecursiveSpinlock::RecursiveSpinlock() { + m_owner = sm_none_owner; +} + void RecursiveSpinlock::lock() { auto tid = std::this_thread::get_id(); if (m_owner.load(std::memory_order_relaxed) != tid) { diff --git a/src/core/include/megbrain/utils/thread_impl_spinlock.h b/src/core/include/megbrain/utils/thread_impl_spinlock.h index 9cbafc27..b9f1efc4 100644 --- a/src/core/include/megbrain/utils/thread_impl_spinlock.h +++ b/src/core/include/megbrain/utils/thread_impl_spinlock.h @@ -33,15 +33,15 @@ class Spinlock final: public NonCopyableObj { }; //! recursive spinlock -class RecursiveSpinlock final: public NonCopyableObj { +class RecursiveSpinlock final : public NonCopyableObj { static const std::thread::id sm_none_owner; - std::atomic m_owner{sm_none_owner}; + std::atomic m_owner; size_t m_recur_count = 0; - public: - - void lock(); - void unlock(); +public: + RecursiveSpinlock(); + void lock(); + void unlock(); }; } // namespace mgb