mfc 크리티컬 섹션 예제

mfc 크리티컬 섹션 예제

여기서 lpCriticalSection [in, out]은 임계 섹션 개체에 대한 포인터입니다. 중요한 섹션에서는 CRITICAL_SECTION 구조에 메모리를 할당하고 임계 섹션을 초기화합니다. Iniailize임계 섹션 및 초기화임계 섹션및 스핀 카운트는 임계 섹션을 초기화하는 데 사용됩니다. 임계 섹션을 초기화하면 EnterCriticalsection, TryEnterCriticalSection 또는 LeaveCriticalSection 함수 중 하나를 사용합니다. EnterCriticalsection 함수는 임계 섹션을 입력하는 데 사용되며 TryEnterCriticalSection은 차단하지 않고 임계 섹션을 입력합니다. LeaveCricalSection은 임계 섹션을 벗어나는 데 사용됩니다. 포함된 메서드 클래스에 CCriticalSection 형식 데이터 멤버를 추가하고 필요할 때 데이터 멤버를 잠그면 여러 스레드와 클래스를 공유할 수도 있습니다. 코드의 중요한 섹션은 CriticalSection 개체를 사용하여 구체적이어야 합니다. 그런 다음 CriticalSectionLock 개체를 사용하여 이 임계 섹션을 잠그어 다른 스레드의 동시 액세스를 방지할 수 있습니다. 스레드가 임계 섹션을 입력해야 하는 경우 EnterCriticalSection()을 호출합니다. 임계 섹션에 다른 스레드가 없는 경우 호출 스레드는 호출 스레드를 획득하고 실행을 계속합니다.

다른 스레드가 임계 섹션에 있는 경우 호출 스레드는 임계 섹션을 실행하는 스레드가 LeaveCriticalSection()를 호출하여 스레드를 떠날 때까지 절전 모드로 연결됩니다. LeaveCriticalSection()를 호출하는 스레드는 임계 섹션의 소유자여야 합니다. EnterCriticalSection()를 호출하는 스레드는 임계 섹션에 대한 액세스 권한을 얻을 때까지 반환되지 않습니다. 시간 시간에 대한 개념은 없습니다. 다음 코드는 임계 섹션 구조를 선언한 다음 InitializeCriticalSection()을 호출하여 초기화합니다. 프로그램이 완료되면 DeleteCriticalSection()를 호출하여 삭제합니다: 시간 대기가 필요한 경우 CCriticalSection 개체 대신 CMutex 개체를 사용할 수 있습니다. 다른 동기화 개체 이름이 임계 단면 개체와 같으면 임계 섹션 개체가 소유권을 무한히 기다립니다. 임계 단면 오브젝트는 객체를 이동하거나 복사할 수 없습니다. 다른 프로세스에서 스레드를 동기화해야 하는 경우 Mutex 개체를 사용합니다. 삭제CriticalSection 함수는 모든 임계 섹션 개체를 해제합니다. 삭제 임계 섹션을 호출 한 후 EnterCriticalsection 또는 LeaveCriticalSection을 호출할 수 없습니다. CCriticalSection 클래스는 중요한 섹션 동기화 개체의 기능을 제공합니다.

기본 생성자는 임계 섹션 개체를 생성하는 데 사용됩니다. 잠금 및 잠금 해제 함수는 동기화 개체의 리소스 액세스를 제어하는 데 사용됩니다. 임계 섹션 및 CriticalSectionLock 클래스에 대한 자세한 내용은 SimbaEngine C++ API 참조를 참조하십시오. 중요 섹션은 속도가 중요하고 프로세스가 경계를 넘어 리소스가 사용되지 않을 때 뮤텍스(CMutex 참조)대신 사용됩니다. 임계 섹션 대신 뮤텍스를 사용할 수 있습니다. 그러나 중요한 섹션 스레드 동기화 개체는 다른 동기화 개체에 비해 약간 빠릅니다. 임계 섹션 개체는 프로세스 내의 스레드를 동기화합니다. 임계 섹션에서는 한 번에 하나의 스레드만 액세스할 수 있습니다. 임계 섹션 개체는 뮤텍스 오브젝트와 동일합니다. 그러나 Mutex 개체를 사용하면 프로세스 전체에서 개체를 동기화할 수 있습니다.

그러나 임계 섹션 개체는 다른 프로세스와의 동기화를 허용하지 않습니다. 임계 섹션은 프로세스 경계 내의 스레드를 동기화하는 데 사용됩니다. MFC CMutex, CCriticalSection, CSemaphore 및 CEvent 클래스는 Microsoft Foundation 클래스 라이브러리에서 스레드를 동기화하는 데 사용됩니다. 독립 실행형 메서드 독립 실행형 CCriticalSection 개체를 사용 하려면 필요할 때 CCriticalSection 개체를 구성 합니다. 생성자에서 성공적으로 반환된 후 Lock 을 호출하여 개체를 명시적으로 잠급전지합니다.

Share this post