다음을 통해 공유


CMultiLock 클래스

다중 스레드 프로그램에 대한 액세스를 제어할 때 사용하는 액세스 제어 메커니즘을 나타냅니다.

구문

class CMultiLock

멤버

공용 생성자

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

공용 메서드

이름 설명
CMultiLock::IsLocked 배열의 특정 동기화 개체가 잠겨 있는지 여부를 확인합니다.
CMultiLock::Lock 동기화 개체의 배열을 기다립니다.
CMultiLock::Unlock 소유된 동기화 개체를 해제합니다.

설명

CMultiLock 에는 기본 클래스가 없습니다.

동기화 클래스 CSemaphore, CMutexCEvent를 사용하려면 동기화 개체를 대기하고 해제할 CSingleLock 개체를 만들 CMultiLock있습니다. 특정 시간에 사용할 수 있는 여러 개체가 있는 경우 사용합니다 CMultiLock . 한 번에 하나의 개체에서만 대기해야 하는 경우에 사용합니다 CSingleLock .

개체를 CMultiLock 사용하려면 먼저 대기할 동기화 개체의 배열을 만듭니다. 다음으로, 제어된 CMultiLock 리소스 클래스의 멤버 함수 내에서 개체의 생성자를 호출합니다. 그런 다음 Lock 멤버 함수를 호출하여 리소스를 사용할 수 있는지 확인합니다(신호). 이 경우 멤버 함수의 나머지 부분을 계속 진행합니다. 사용할 수 있는 리소스가 없는 경우 리소스가 해제될 때까지 지정된 시간 동안 기다리거나 오류를 반환합니다. 리소스 사용이 완료되면 개체를 다시 사용할 경우 Unlock 함수를 CMultiLock 호출하거나 개체를 CMultiLock 제거하도록 허용합니다.

CMultiLock 개체는 스레드에 응답할 수 있는 개체 수가 CEvent 많은 경우에 가장 유용합니다. 모든 포인터를 포함하는 배열을 CEvent 만들고 호출 Lock합니다. 이로 인해 스레드는 이벤트 중 하나가 신호를 받을 때까지 대기합니다.

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

상속 계층 구조

CMultiLock

요구 사항

헤더: afxmt.h

CMultiLock::CMultiLock

CMultiLock 개체를 생성합니다.

CMultiLock(
    CSyncObject* ppObjects [ ],
    DWORD dwCount,
    BOOL bInitialLock = FALSE);

매개 변수

ppObjects
대기할 동기화 개체에 대한 포인터 배열입니다. NULL일 수 없습니다.

dwCount
ppObjects의 개체 수입니다. 0보다 커야 합니다.

bInitialLock
제공된 개체에 처음 액세스할지 여부를 지정합니다.

설명

이 함수는 대기할 동기화 개체의 배열을 만든 후 호출됩니다. 일반적으로 동기화 개체 중 하나를 사용할 수 있게 될 때까지 기다려야 하는 스레드 내에서 호출됩니다.

CMultiLock::IsLocked

지정된 개체가 서명되지 않은(사용할 수 없음) 여부를 확인합니다.

BOOL IsLocked(DWORD dwItem);

매개 변수

dwItem
상태를 쿼리하는 개체에 해당하는 개체 배열의 인덱스입니다.

Return Value

지정된 개체가 잠겨 있으면 0이 아닌 경우 그렇지 않으면 0입니다.

CMultiLock::Lock

생성자에 제공된 동기화 개체에 의해 제어되는 하나 이상의 리소스에 액세스하려면 이 함수를 CMultiLock 호출합니다.

DWORD Lock(
    DWORD dwTimeOut = INFINITE,
    BOOL bWaitForAll = TRUE,
    DWORD dwWakeMask = 0);

매개 변수

dwTimeOut
동기화 개체를 사용할 수 있을 때까지 대기하는 시간을 지정합니다(신호). INFINITE이 Lock 면 반환하기 전에 개체가 신호를 받을 때까지 기다립니다.

bWaitForAll
대기한 모든 개체가 반환되기 전에 동시에 신호를 받아야 하는지 여부를 지정합니다. FALSE이 Lock 면 대기한 개체 중 하나가 신호를 받으면 반환됩니다.

dwWakeMask
대기를 중단할 수 있는 다른 조건을 지정합니다. 이 매개 변수 에 사용할 수 있는 옵션의 전체 목록은 Windows SDK의 MsgWaitForMultipleObjects 를 참조하세요.

Return Value

실패하면 Lock - 1을 반환합니다. 성공하면 다음 값 중 하나를 반환합니다.

  • WAIT_OBJECT_0 및 WAIT_OBJECT_0 +(개체 수 - 1)

    bWaitForAll이 TRUE이면 모든 개체에 신호가 전송됩니다(사용 가능). bWaitForAll이 FALSE이면 반환 값입니다. WAIT_OBJECT_0 신호를 받은 개체의 개체 배열에 있는 인덱스입니다(사용 가능).

  • WAIT_OBJECT_0 + (개체 수)

    dwWakeMask지정된 이벤트는 스레드의 입력 큐에서 사용할 수 있습니다.

  • WAIT_ABANDONED_0 및 WAIT_ABANDONED_0 +(개체 수 - 1)

    bWaitForAll이 TRUE이면 모든 개체가 신호를 받고 하나 이상의 개체가 중단된 뮤텍스 개체입니다. bWaitForAll이 FALSE이면 반환 값입니다. WAIT_ABANDONED_0 대기를 충족하는 중단된 뮤텍스 개체의 개체 배열에 있는 인덱스입니다.

  • WAIT_TIMEOUT

    대기가 성공하지 않고 dwTimeOut지정된 시간 제한 간격이 만료되었습니다.

설명

bWaitForAll이 TRUE Lock 이면 모든 동기화 개체가 동시에 신호를 받으면 성공적으로 반환됩니다. bWaitForAll이 FALSE Lock 이면 하나 이상의 동기화 개체가 신호를 받으면 즉시 반환됩니다.

즉시 반환할 수 없는 경우 Lock 반환하기 전에 dwTimeOut 매개 변수에 지정된 시간(밀리초)보다 더 이상 기다리지 않습니다. dwTimeOut이 INFINITE Lock 이면 개체에 대한 액세스 권한을 얻거나 dwWakeMask지정된 조건이 충족될 때까지 반환되지 않습니다. 그렇지 않으면 동기화 개체를 획득할 수 있으면 Lock 성공적으로 반환되고, 그렇지 않으면 실패를 반환합니다.

CMultiLock::Unlock

소유하는 동기화 개체를 CMultiLock해제합니다.

BOOL Unlock();

BOOL Unlock(
    LONG lCount,
    LPLONG lPrevCount = NULL);

매개 변수

lCount
릴리스할 참조 개수입니다. 0보다 커야 합니다. 지정된 양으로 인해 개체 수가 최대값을 초과하면 개수가 변경되지 않고 함수가 FALSE를 반환합니다.

lPrevCount
동기화 개체에 대한 이전 개수를 받을 변수를 가리킵니다. NULL이면 이전 개수가 반환되지 않습니다.

Return Value

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

설명

이 함수는 's 소멸자가 호출 CMultiLock합니다.

첫 번째 형식은 Unlock .에서 관리하는 동기화 개체의 잠금을 해제하려고 시도합니다 CMultiLock. 두 번째 형식은 Unlock 소유CMultiLock하는 개체의 잠금을 CSemaphore 해제하려고 시도합니다. 잠긴 CSemaphore 개체를 소유하지 않으면 CMultiLock 함수는 FALSE를 반환하고, 그렇지 않으면 TRUE를 반환합니다. lCountlpPrevCount는 CSingleLock::Unlock매개 변수와 정확히 동일합니다. 두 번째 형식 Unlock 은 멀티록 상황에 거의 적용되지 않습니다.

참고 항목

계층 구조 차트