Query: Will a MutexGuard object release before a function return value
Consider the C++ code:
class MutexGuard //A familiar sort of class for making mutexes
. . .
~MutexGuard(); //releases the mutex when the stack pops
int MyClass::increment(int value) //thread-safe
MutexGuard myguard(m_mutex); //lock the private member data
m_privatemember = value;
When the function completes, the new value of m_privatemember is
return-by-value, myguard is popped off the stack, its destructor runs,
and the mutex is released.
Is there any chance that the mutex is released before m_privatemember
is copied for return-by-value? If that happened, another thread could
nip in and change the value before it is copied.