다음을 통해 공유


CSemaphore 클래스

클래스 CSemaphore 의 개체는 하나 이상의 프로세스에서 제한된 수의 스레드가 지정된 리소스에 액세스하는 스레드 수의 유지 관리를 허용하는 동기화 개체인 "세마포"를 나타냅니다.

구문

class CSemaphore : public CSyncObject

멤버

공용 생성자

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

설명

세마포는 제한된 수의 사용자만 지원할 수 있는 공유 리소스에 대한 액세스를 제어하는 데 유용합니다. 현재 개체 수는 CSemaphore 허용되는 추가 사용자 수입니다. 개수가 0에 도달하면 개체에서 제어하는 CSemaphore 리소스를 사용하려는 모든 시도가 시스템 큐에 삽입되고 시간이 초과되거나 개수가 0 이상으로 증가할 때까지 기다립니다. 개체를 생성 CSemaphore 할 때 제어되는 리소스에 한 번에 액세스할 수 있는 최대 사용자 수가 지정됩니다.

개체를 CSemaphore 사용하려면 필요할 때 개체를 CSemaphore 생성합니다. 대기하려는 세마포의 이름과 애플리케이션이 처음에 소유해야 하는 세마포의 이름을 지정합니다. 그런 다음 생성자가 반환되면 세마포에 액세스할 수 있습니다. 제어된 리소스에 대한 액세스가 완료되면 CSyncObject::Unlock를 호출합니다.

개체를 사용하는 CSemaphore 다른 방법은 제어하려는 클래스에 형식 CSemaphore 변수를 데이터 멤버로 추가하는 것입니다. 제어된 개체를 생성하는 동안 초기 액세스 수, 최대 액세스 수, 세마포 이름(프로세스 경계를 넘어 사용되는 경우) 및 원하는 보안 특성을 지정하는 데이터 멤버의 생성자를 CSemaphore 호출합니다.

이러한 방식으로 개체에 의해 제어되는 리소스에 CSemaphore 액세스하려면 먼저 리소스의 액세스 멤버 함수에 CSingleLock 형식 또는 CMultiLock 형식의 변수를 만듭니다. 그런 다음 잠금 개체의 Lock 멤버 함수(예: CSingleLock::Lock)를 호출합니다. 이 시점에서 스레드는 리소스에 대한 액세스 권한을 얻거나, 리소스가 해제될 때까지 기다렸다가 액세스 권한을 얻거나, 리소스가 해제되고 시간이 초과될 때까지 기다리며 리소스에 대한 액세스 권한을 얻지 않습니다. 어떤 경우든 리소스가 스레드로부터 안전한 방식으로 액세스되었습니다. 리소스를 해제하려면 잠금 개체의 Unlock 멤버 함수(예: CSingleLock::Unlock)를 사용하거나 잠금 개체가 범위를 벗어나도록 허용합니다.

또는 개체 독립 실행형을 CSemaphore 만들고 제어된 리소스에 액세스하기 전에 명시적으로 액세스할 수 있습니다. 이 메서드는 소스 코드를 읽는 사람에게는 더 명확하지만 오류가 발생하기 쉽습니다.

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

상속 계층 구조

CObject

CSyncObject

CSemaphore

요구 사항

헤더: afxmt.h

CSemaphore::CSemaphore

명명되거나 명명되지 않은 개체를 CSemaphore 생성합니다.

CSemaphore(
    LONG lInitialCount = 1,
    LONG lMaxCount = 1,
    LPCTSTR pstrName = NULL,
    LPSECURITY_ATTRIBUTES lpsaAttributes = NULL);

매개 변수

lInitialCount
세마포의 초기 사용 횟수입니다. 0보다 크거나 같고 lMaxCount보다 작거나 같 아야 합니다.

lMaxCount
세마포의 최대 사용 횟수입니다. 0보다 커야 합니다.

pstrName
세마포의 이름입니다. 세마포가 프로세스 경계를 넘어 액세스되는 경우 제공해야 합니다. 이 경우 NULL개체는 이름이 지정되지 않습니다. 이름이 기존 세마포와 일치하는 경우 생성자는 해당 이름의 세마포를 참조하는 새 CSemaphore 개체를 빌드합니다. 이름이 세마포가 아닌 기존 동기화 개체와 일치하면 생성이 실패합니다.

lpsaAttributes
세마포 개체의 보안 특성입니다. 이 구조에 대한 전체 설명은 Windows SDK의 SECURITY_ATTRIBUTES 참조하세요.

설명

개체에 CSemaphore 액세스하거나 해제하려면 CMultiLock 또는 CSingleLock 개체를 만들고 해당 Lock and Unlock 멤버 함수를 호출합니다.

Important

개체를 CSemaphore 만든 후 GetLastError를 사용하여 뮤텍스가 아직 없는지 확인합니다. 뮤텍스가 예기치 않게 존재했다면 불량 프로세스가 웅크리고 있음을 나타낼 수 있으며 뮤텍스를 악의적으로 사용하려고 할 수 있습니다. 이 경우 권장되는 보안 의식 프로시저는 핸들을 닫고 개체를 만드는 데 오류가 있는 것처럼 계속 진행하는 것입니다.

참고 항목

CSyncObject 클래스
계층 구조 차트