Boost logo

Boost Users :

Subject: Re: [Boost-users] Race in boost::condition_variable::wait
From: Éric Malenfant (eric.malenfant_at_[hidden])
Date: 2015-12-23 18:02:10


You're right and I was doubly wrong: the guard locks the mutex on
activate() and I totally missed the point about the "internal vs external
mutex".
(Note to self: don't try to read code on your tiny smartphone screen)

However, I still don't understand your question. The thread releases the
external mutex while holding the internal, and notify_all acquires the
internal before notifying the condition.

Éric Malenfant
Le 2015-12-23 12:19 PM, "Chris Stankevitz" <chrisstankevitz_at_[hidden]> a
écrit :

> On Wed, Dec 23, 2015 at 7:44 AM, Éric Malenfant
> <eric.malenfant_at_[hidden]> wrote:
> > Unless I'm missing something, the guard in condition_variable::wait does
> not
> > release the mutex, it is simply there to ensure that it is reacquired on
> > exit. The mutex is released by pthread_cond_wait (atomically with the
> wait
> > on the condition).
>
> Eric,
>
> Thank you for your reply.
>
> I believe you are incorrect that the guard only reacquires (and does
> not release) the mutex. The line "guard.activate(m);" indeed releases
> the user mutex before pthread_cond_wait (see below).
>
> You are correct that pthread_cond_wait atomically releases the mutex
> -- but it is releasing the internal boost mutex, not the "external"
> user mutex which has already been released by the guard.
>
> I assume that I am missing something, but I cannot figure out what it is.
>
> Chris
>
> ===
>
> template<typename MutexType>
> struct lock_on_exit
> {
> MutexType* m;
>
> lock_on_exit():
> m(0)
> {}
>
> void activate(MutexType& m_)
> {
> m_.unlock();
> m=&m_;
> }
> ~lock_on_exit()
> {
> if(m)
> {
> m->lock();
> }
> }
> };
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users



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