Являются ли два примера кода эквивалентными?мьютексы и замки
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;
}
- Во втором примере: будет блокировка выходить за рамки после того, как копия возвращаемого значения была сделана? Это имеет значение, если объект был возвращен, у которого было много инструкций по копированию.
- Является ли блокировка необходимой, если вы только собираетесь вернуть значение int? Или это копирование int атомной операции?
Меня больше беспокоит атомарность операций. Что происходит сначала в примере кода 2: копия возвращаемого значения или уничтожение блокировки? Если это не первый, то это багги код. – StackedCrooked
Насколько я могу судить, сначала возвращаемое значение «строится», тогда все автоматические объекты разрушаются. – sellibitze
Я просто понял, что если функция возвращает локальную переменную, она должна скопировать ее, прежде чем уничтожить ее. Doh. – StackedCrooked