아래의 두 코드 샘플은 동일합니까? 뮤텍스 및 잠금
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
방금 함수가 지역 변수를 반환하면 변수를 파괴하기 전에 복사해야한다는 것을 알았습니다. 도. – StackedCrooked