CCriticalSection
개체를 선언하는 클래스가 있습니다. 단순성을 위해 단 하나의 스레드가 한 번에 해당 클래스의 메소드를 입력하고 실행해야한다고 말합니다. 여기 내 질문은개체 수준 CSingleLock 대 메서드 수준 CSingleLock
,
는 거기에 클래스 수준CSingleLock
하고 잠금() 및 잠금 해제() 메소드의 날은 각 기능에 CSingleLock 객체를 선언 사용을 선언 내에서 차이.
class ExclusiveClass
{
CCriticalSection mCS;
ExclusiveClass() : mCS() {}
void someMethod
{
CSingleLock sl(&mCS);
sl.Lock()
// Do whatever you want
sl.Unlock();
}
}
대
class ExclusiveClass
{
CCriticalSection mCS;
CSingleLock mSL;
ExclusiveClass() : mCS(), mSL(&mCS) { }
void someMethod
{
mSL.Lock();
// Do whatever you want
mSL.Unlock();
}
}
나는 하나 개의 결정적인 차이를 알고있다. 두 번째 방법에서는 Unlock() 메서드를 명시 적으로 호출 할 필요가 없습니다. 함수에서 돌아 오면 sl
의 소멸자가 호출되고 메소드 잠금이 자동으로 해제됩니다.
내 관심사는 wrt 예외입니다. 예외가 발생하면 두 번째 접근 방식이 자동으로 해제됩니다. 첫 번째 접근은 어떨까요? 그리고 다른 차이점이 있습니까?
감사합니다. 그것들은 유일한 차이점입니까? – Mohan
@MohanKumar - 예 – Sean