Boost logo

Boost Users :

Subject: [Boost-users] timed waits
From: Just C (justachap_at_[hidden])
Date: 2010-03-26 05:13:21


I was looking at this article about conditon_variables.
http://www.justsoftwaresolutions.co.uk/threading/condition-variable-spurious-wakes.html

For a timeout, the article has the following sample program with condition
variables.

    template<typename Duration>
    bool timed_wait_and_pop(Data& popped_value,
                            Duration const& wait_duration)
    {
        boost::system_time const
timeout=boost::get_system_time()+wait_duration;

        boost::mutex::scoped_lock lock(the_mutex);
        while(the_queue.empty())
        {
            if(!the_condition_variable.timed_wait(lock,timeout))
                return false;
        }

        popped_value=the_queue.front();
        the_queue.pop();
        return true;
    }

However, shouldn't this program instead start with

        boost::mutex::scoped_lock lock(the_mutex, timeout);
        if(!lock.owns())
              return false;

i.e. shouldn't it also take care of getting stuck while locking the mutex.

i.e. if the timeout is 5 seconds & the getting the lock itself takes 10
seconds,
then, the earlier the program will return is 10+ seconds.



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net