On 4/27/2013 2:05 AM, Vicente J. Botet Escriba wrote:
The change set is https://svn.boost.org/trac/boost/changeset/84055. To see the sources, you would need to update the trunk or to take a look at https://svn.boost.org/svn/boost/trunk/boost/thread/
Please let me know what do you think.
I think in latch your wait_for and wait_until don't work correctly in the case of spurious wakes. The easy answer to this is probably use the predicate versions, which will also handle the technicalities of turning wait_for into wait_until during loops caused by spurious wakes. like: struct count_not_zero { count_not_zero(const std::size_t& count_) : count(count_) {} bool operator()() const { return count != 0; } const std::size_t& count; }; template <class Rep, class Period> cv_status wait_for(const chrono::duration<Rep, Period>& rel_time) { boost::unique_lock<boost::mutex> lk(mutex_); return cond_.wait_for(rel_time, count_not_zero(count_)); } template <class lock_type, class Clock, class Duration> cv_status wait_until(const chrono::time_point<Clock, Duration>& abs_time) { boost::unique_lock<boost::mutex> lk(mutex_); return cond_.wait_until(abs_time, count_not_zero(count_)); } You should probably also add a latch_any to go along with condition_variable_any.