다음을 통해 공유


CCriticalSection 수업

한 번에 하나의 스레드가 리소스 또는 코드 섹션에 액세스할 수 있도록 하는 동기화 개체인 "중요 섹션"을 나타냅니다.

구문

class CCriticalSection : public CSyncObject

멤버

공용 생성자

속성 설명
CCriticalSection::CCriticalSection CCriticalSection 개체를 생성합니다.

공용 메서드

이름 설명
CCriticalSection::Lock 개체에 대한 액세스 권한을 얻는 데 CCriticalSection 사용합니다.
CCriticalSection::Unlock CCriticalSection 개체를 해제합니다.

Public 연산자

속성 설명
CCriticalSection::operator CRITICAL_SECTION* 내부 CRITICAL_SECTION 개체에 대한 포인터를 검색합니다.

공용 데이터 멤버

속성 설명
CCriticalSection::m_sect CRITICAL_SECTION 개체입니다.

설명

중요한 섹션은 한 번에 하나의 스레드만 데이터 또는 다른 제어된 리소스를 수정하도록 허용할 수 있는 경우에 유용합니다. 예를 들어 연결된 목록에 노드를 추가하는 것은 한 번에 하나의 스레드에서만 허용해야 하는 프로세스입니다. 개체를 CCriticalSection 사용하여 연결된 목록을 제어하면 한 번에 하나의 스레드만 목록에 액세스할 수 있습니다.

참고 항목

클래스의 CCriticalSection 기능은 실제 Win32 CRITICAL_SECTION 개체에서 제공됩니다.

속도가 중요하고 리소스가 프로세스 경계를 넘어 사용되지 않는 경우 중요한 섹션은 뮤텍스 대신 사용됩니다(참조 CMutex).

개체를 사용하는 CCriticalSection 방법에는 독립 실행형과 클래스에 포함된 두 가지 방법이 있습니다.

  • 독립 실행형 메서드 독립 실행형 CCriticalSection 개체를 사용하려면 필요할 때 개체를 CCriticalSection 생성합니다. 생성자에서 성공적으로 반환된 후 호출을 사용하여 개체를 명시적으로 잠급 수 있습니다 Lock. 중요한 섹션에 대한 액세스가 완료되면 호출 Unlock 합니다. 이 메서드는 소스 코드를 읽는 사람에게 더 명확하지만 액세스 전후에 중요한 섹션을 잠그고 잠금을 해제해야 하므로 오류가 발생하기 쉽습니다.

    더 바람직한 방법은 클래스를 사용하는 것입니다 CSingleLock . 또한 a LockUnlock 메서드가 있지만 예외가 발생하는 경우 리소스 잠금 해제에 대해 걱정할 필요가 없습니다.

  • 포함된 메서드 -type 데이터 멤버를 클래스에 추가하고 CCriticalSection필요할 때 데이터 멤버를 잠그면 여러 스레드와 클래스를 공유할 수도 있습니다.

개체 사용에 CCriticalSection 대한 자세한 내용은 다중 스레딩: 동기화 클래스를 사용하는 방법 문서를 참조하세요.

상속 계층 구조

CObject

CSyncObject

CCriticalSection

요구 사항

머리글: afxmt.h

CCriticalSection::CCriticalSection

CCriticalSection 개체를 생성합니다.

CCriticalSection();

설명

개체에 CCriticalSection 액세스하거나 해제하려면 개체를 CSingleLock 만들고 개체 LockUnlock 멤버 함수를 호출합니다. 개체가 CCriticalSection 독립 실행형으로 사용되는 경우 해당 멤버 함수를 Unlock 호출하여 해제합니다.

생성자가 필요한 시스템 메모리를 할당하지 못하면 메모리 예외(형식 CMemoryException)가 자동으로 throw됩니다.

예시

CCriticalSection::Lock에 대한 예제를 참조하세요.

CCriticalSection::Lock

이 멤버 함수를 호출하여 중요한 섹션 개체에 대한 액세스 권한을 얻습니다.

BOOL Lock();
BOOL Lock(DWORD dwTimeout);

매개 변수

dwTimeoutLock 는 이 매개 변수 값을 무시합니다.

Return Value

함수가 성공한 경우 0이 아닌 경우 그렇지 않으면 0입니다.

설명

Lock 는 중요한 섹션 개체가 신호를 받을 때까지 반환되지 않는 차단 호출입니다(사용할 수 있음).

시간이 초과된 대기가 필요한 경우 개체 대신 개체를 CMutex CCriticalSection 사용할 수 있습니다.

필요한 시스템 메모리를 할당하지 못하면 Lock 메모리 예외(형식 CMemoryException)가 자동으로 throw됩니다.

예시

이 예제에서는 공유 CCriticalSection 개체를 사용하여 공유 리소스(정적 _strShared 개체)에 대한 액세스를 제어하여 중첩된 중요 섹션 접근 방식을 보여 줍니다. 이 함수는 SomeMethod 안전한 방식으로 공유 리소스를 업데이트하는 방법을 보여 줍니다.

//Definition of critical section class
class CMyCritSectClass
{
   static CString _strShared; //shared resource
   static CCriticalSection _critSect;

public:
   CMyCritSectClass(void) {}
   ~CMyCritSectClass(void) {}
   void SomeMethod(void); //locks, modifies, and unlocks shared resource
};

//Declaration of static members and SomeMethod
CString CMyCritSectClass::_strShared;
CCriticalSection CMyCritSectClass::_critSect;

void CMyCritSectClass::SomeMethod()
{
   _critSect.Lock();
   if (_strShared == "")
      _strShared = "<text>";
   _critSect.Unlock();
}

CCriticalSection::m_sect

모든 CCriticalSection 메서드에서 사용되는 중요한 섹션 개체를 포함합니다.

CRITICAL_SECTION m_sect;

CCriticalSection::operator CRITICAL_SECTION*

개체를 검색 CRITICAL_SECTION 합니다.

operator CRITICAL_SECTION*();

설명

내부 CRITICAL_SECTION 개체에 대한 포인터를 검색하려면 이 함수를 호출합니다.

CCriticalSection::Unlock

다른 스레드에서 CCriticalSection 사용할 개체를 해제합니다.

BOOL Unlock();

Return Value

개체가 스레드에서 CCriticalSection 소유하고 릴리스에 성공하면 0이 아니고, 그렇지 않으면 0입니다.

설명

CCriticalSection 독립 실행형 Unlock 으로 사용되는 경우 중요한 섹션에서 제어하는 리소스 사용을 완료한 직후에 호출해야 합니다. 개체를 CSingleLock 사용하는 CCriticalSection::Unlock 경우 잠금 개체의 Unlock 멤버 함수에 의해 호출됩니다.

예시

CCriticalSection::Lock에 대한 예를 참조하세요.

참고 항목

CSyncObject 수업
계층 구조 차트
CMutex 수업