diff --git a/Utilities/Thread.cpp b/Utilities/Thread.cpp index e2224deefa..d9b244920f 100644 --- a/Utilities/Thread.cpp +++ b/Utilities/Thread.cpp @@ -1766,8 +1766,7 @@ bool thread_base::finalize(int) noexcept const bool result = m_state.exchange(thread_state::finished) == thread_state::detached; // Signal waiting threads - m_mutex.lock_unlock(); - m_jcv.notify_all(); + m_state.notify_all(); return result; } @@ -1845,16 +1844,10 @@ thread_base::~thread_base() void thread_base::join() const { - if (m_state == thread_state::finished) + for (auto state = m_state.load(); state != thread_state::finished;) { - return; - } - - std::unique_lock lock(m_mutex); - - while (m_state != thread_state::finished) - { - m_jcv.wait(lock); + m_state.wait(state); + state = m_state; } } diff --git a/Utilities/Thread.h b/Utilities/Thread.h index c8ea405388..f3cf11a9cb 100644 --- a/Utilities/Thread.h +++ b/Utilities/Thread.h @@ -124,9 +124,6 @@ class thread_base // Thread flags atomic_t m_signal{0}; - // Thread joining condition variable - mutable cond_variable m_jcv; - // Thread state atomic_t m_state = thread_state::created;