¿Son equivalentes los dos ejemplos de código a continuación?mutexes y bloqueos
Poco::ProcessHandle::PID ProcessRunner::processId() const
{
Poco::ProcessHandle::PID pid = 0;
mMutex.lock();
pid = mPID;
mMutex.unlock();
return pid;
}
,
Poco::ProcessHandle::PID ProcessRunner::processId() const
{
Poco::ScopedLock<Poco::Mutex> lock(mMutex);
return mPID;
}
- En el segundo ejemplo: el bloqueo se vaya fuera de alcance después de realizar la copia valor de retorno? Esto sería importante si se devolvió un objeto que tenía muchas instrucciones para copiar.
- ¿Es necesario un bloqueo si solo va a devolver un valor int? ¿O es la copia de la int una operación atómica?
Me preocupa más la atomicidad de las operaciones. ¿Qué sucede primero en el ejemplo de código 2: la copia del valor de retorno o la destrucción del bloqueo? Si este no es el primero, entonces es un código con errores. – StackedCrooked
Por lo que puedo decir, primero se "construye" el valor de retorno, luego se destruyen todos los objetos automáticos. – sellibitze
Me acabo de dar cuenta de que si una función devuelve una variable local, tiene que copiarla antes de destruirla. Doh. – StackedCrooked