兩個代碼示例是否低於等效?互斥鎖和鎖
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 2009-11-17 20:49:21
據我所知,首先返回值是「構造」,然後所有的自動對象被破壞。 – sellibitze 2009-11-17 20:50:41
我剛剛意識到,如果一個函數返回一個局部變量,它必須在破壞它之前將其複製。衛生署。 – StackedCrooked 2009-11-17 20:54:06