Opened 7 years ago
Closed 6 years ago
#12120 closed Bugs (fixed)
Performance improvement in thread/barrier.hpp
Reported by: | Owned by: | viboes | |
---|---|---|---|
Milestone: | Boost 1.62.0 | Component: | thread |
Version: | Boost 1.61.0 | Severity: | Optimization |
Keywords: | barrier wait performance | Cc: |
Description
The current Boost code in thread/barrier.hpp has this code:
bool wait() {
boost::unique_lock < boost::mutex > lock(m_mutex); unsigned int gen = m_generation;
if (--m_count == 0) {
m_generation++; m_count = static_cast<unsigned int>(fct_()); BOOST_ASSERT(m_count != 0); m_cond.notify_all(); return true;
}
while (gen == m_generation)
m_cond.wait(lock);
return false;
}
In the line m_cond.notify_all(); m_mutex is locked while the other threads are notified. This is a performance anti-pattern: the notified threads will first have to wait for the mutex to be released.
By adding the line: lock.unlock(); before the m_cond.notify_all(); the performance of the barrier class is improved.
More info why this is better, see sample in: http://en.cppreference.com/w/cpp/thread/condition_variable
Change History (3)
comment:1 by , 6 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
comment:2 by , 6 years ago
Milestone: | To Be Determined → Boost 1.62.0 |
---|
comment:3 by , 6 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |