两个代码示例是否低于等效?互斥锁和锁
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