Currently studying about std::mutex and would love some help. If I've a code that looks like - 
....
if(returnBoolValue())
{
    std::lock_guard<std::mutex> lock(mutex_var);
    ....
    ....
}
....
is the std::lock_guard guarding the function returning the value inside if condition? ie. returnBoolValue()
And how should I improve it so that function call is inside the guard as well, if possible?
std::mutex - http://en.cppreference.com/w/cpp/thread/mutex
std::lock_guard - http://en.cppreference.com/w/cpp/thread/lock_guard
Currently it's not possible to do this without adding another scope (C++17 has a way to do this)
A solution would be
....
{
   std::lock_guard<std::mutex> lock(mutex_var);
   if(returnBoolValue())
   {
      ....
      ....
   }
}
....
C++ 17 way:
....
if(std::lock_guard<std::mutex> lock(mutex_var); returnBoolValue())
{
   ....
   ....
}
....
                        The lock guard locks the mutex when it's constructed: that is, when control flow of your program reaches the declaration of lock. It releases (unlocks) the mutex when the guard is destructed, which happens when control flows through the } terminating the then-block (either by flowing through there naturally, or "forced" by a return, throw, or jump statement).
This of course also shows how you can extend the scope "protected" by the mutex: extend the scope of the lock variable:
{
  std::lock_guard<std::mutex> lock(mutex_var);
  if(returnBoolValue())
  {
    ....
    ....
  }
}
Note that I added an extra block around the "lock + if" pair, to make sure the mutex is unlocked as soon as the if-block finishes.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With