Boost logo

Boost Users :

Subject: [Boost-users] [thread] release lock before cond.var. notified?
From: Thomas M (firespot71_at_[hidden])
Date: 2013-09-09 06:34:19


Hi,

Consider a boolean variable, a mutex and a condition variable:

// simplified code snippet begin
bool Continue = false;
boost::mutex someMutex;
boost::condition_variable someCondVar;
// simplified code snippet end

A number of (boost-)threads check if the boolean variable is set to true
in order to continue execution, or otherwise wait for this to happen:

// simplified code snippet begin
boost::unique_lock<boost::mutex> threadLock(someMutex);
while (Continue == false)
{
someCondVar.wait(threadLock);
}
// simplified code snippet end

and a single controller thread is responsible for setting Continue to
true (see snippets below).
Now the question: Is there a strong point pro or against releasing
controllerLock before the notify_all-signal is sent?
E.g. is there preference for the first or second variant as below (see
placement of curly brackets!), or even a need for one to ensure correctness?

// simplified code snippet begin - Variant 1
// notify_all is issued while controllerLock is still being held
{
boost::unique_lock<boost::mutex> controllerLock(someMutex);
Continue = true;
someCondVar.notify_all();
}
// simplified code snippet end

// simplified code snippet begin - Variant 2
// notify_all is issued when controllerLock has already been released
{
boost::unique_lock<boost::mutex> controllerLock(someMutex);
Continue = true;
}
someCondVar.notify_all();
// simplified code snippet end

Thanks for your input and help,
Thomas


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