1
그것은 MSDN에서 잠금 및 잠금 CCriticalSection 개체에 언급되어 있습니다, 우리 CSingleLock 사용해야합니다. 그러나 CCriticalSection :: lock() 및 CCriticalSection :: unlock() 같은 일을, 안 그래? 그렇다면 두 방법의 차이점은 무엇입니까?Csinglelock은 무엇을 사용합니까?
그것은 MSDN에서 잠금 및 잠금 CCriticalSection 개체에 언급되어 있습니다, 우리 CSingleLock 사용해야합니다. 그러나 CCriticalSection :: lock() 및 CCriticalSection :: unlock() 같은 일을, 안 그래? 그렇다면 두 방법의 차이점은 무엇입니까?Csinglelock은 무엇을 사용합니까?
래퍼를 사용하면 잠금을 해제하는 지점에서 무엇을 하든지 (거의) 기능을 떠나면 잠금이 해제됩니다.
고려 :
void func()
{
lock();
... plenty of lines ...
// x = 8128 happens on a Wednesday, in a month without
// r in the name, only if the day is divisible by 7 and 3.
if (x == 8128)
return;
... more lines of code ...
unlock();
}
그래서, 한 번에 모든 이제 다시, 응용 프로그램이 잠금을 해제 잊는다. 당신이 래퍼를 사용하는 경우 등 예외를 사용 고토,
을받을 경우
같은
적용, 당신은 소멸자가 호출 될 것이라고 보장 할 때 래퍼 끝의 범위. 이것은 자물쇠 용 그대로 또는std::vector
과 마찬가지로 유용합니다.
예를 들어 longjmp
을 사용하여 컨텍스트를 뛰어 넘으면 도움이되지 않습니다. 그렇다면 longjmp
을 사용하면 안됩니다!
간단한 답변으로는 너무 큰 제목이지만 [예외 안전] (http://en.wikipedia.org/wiki/Exception_safety) 및 [RAII] (http://stackoverflow.com/)에 대해 알아야합니다. 질문/2321511). 뭔가가 '잠금'과 '잠금 해제'사이에 예외를 던지면 어떻게 될까요? 소멸자가 명시 적 함수 호출과 다른 점은 무엇입니까? –