I due esempi di codice sono equivalenti?mutex e blocchi
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;
}
- Nel secondo campione: sarà la serratura andare fuori portata al termine della copia valore di ritorno è stato fatto? Ciò sarebbe importante se fosse restituito un oggetto con molte istruzioni per la copia.
- È necessario un blocco se si restituisce solo un valore int? O è la copia dell'int un'operazione atomica?
Sono più preoccupato per l'atomicità delle operazioni. Che succede prima nel codice di esempio 2: la copia del valore di ritorno o la distruzione della serratura? Se questo non è il primo, allora è un codice bacato. – StackedCrooked
Per quanto ne so, prima il valore restituito è "costruito", quindi tutti gli oggetti automatici vengono distrutti. – sellibitze
Ho appena realizzato che se una funzione restituisce una variabile locale, deve copiarla prima di distruggerla. Doh. – StackedCrooked