다음을 통해 공유


EnterSynchronizationBarrier 함수(synchapi.h)

최대 스레드 수가 장벽에 들어갈 때까지 호출 스레드가 동기화 장벽에서 대기하도록 합니다.

구문

BOOL EnterSynchronizationBarrier(
  [in, out] LPSYNCHRONIZATION_BARRIER lpBarrier,
  [in]      DWORD                     dwFlags
);

매개 변수

[in, out] lpBarrier

초기화된 동기화 장벽에 대한 포인터입니다. InitializeSynchronizationBarrier 함수를 사용하여 장벽을 초기화합니다. SYNCHRONIZATION_BARRIER 애플리케이션에서 수정해서는 안 되는 불투명 구조체입니다.

[in] dwFlags

이 장벽에 들어가는 스레드의 동작을 제어하는 플래그입니다. 이 매개 변수는 다음 값 중 하나 이상일 수 있습니다.

의미
SYNCHRONIZATION_BARRIER_FLAGS_BLOCK_ONLY 장벽에 들어가는 스레드가 마지막 스레드가 장벽에 들어갈 때까지 즉시 차단되도록 지정합니다. 자세한 내용은 설명 부분을 참조하세요.
SYNCHRONIZATION_BARRIER_FLAGS_SPIN_ONLY 회전 스레드가 장벽의 최대 스핀 수를 초과하는 경우에도 장벽에 들어가는 스레드가 마지막 스레드가 장벽에 들어갈 때까지 회전해야 되도록 지정합니다. 자세한 내용은 설명 부분을 참조하세요.
SYNCHRONIZATION_BARRIER_FLAGS_NO_DELETE 함수가 장벽을 삭제하는 것이 안전한지 확인하는 데 필요한 작업을 건너뛰어 성능을 향상시킬 수 있도록 지정합니다. 이 장벽에 들어가는 모든 스레드는 플래그를 지정해야 합니다. 그렇지 않으면 플래그가 무시됩니다. 이 플래그는 장벽이 삭제되지 않는 경우에만 사용해야 합니다.

반환 값

TRUE 는 마지막 스레드가 장벽에 신호를 보낼 수 있도록 합니다. 마지막 스레드가 반환 값을 FALSE수신한다는 신호를 받기 전에 장벽을 신호하는 스레드입니다.

설명

동기화 장벽에 들어가는 스레드의 기본 동작은 장벽의 최대 스핀 수에 도달할 때까지 회전한 다음 차단하는 것입니다. 이렇게 하면 마지막 스레드가 비교적 짧은 시간 안에 장벽에 진입하는 경우 스레드를 빠르게 다시 시작할 수 있습니다. 그러나 마지막 스레드가 도착하는 데 비교적 오래 걸리는 경우 스레드는 대기하는 동안 프로세서 시간 사용을 중지하도록 이미 장벽 블록에 있습니다.

스레드는 SYNCHRONIZATION_BARRIER_FLAGS_BLOCK_ONLY 또는 SYNCHRONIZATION_BARRIER_FLAGS_SPIN_ONLY 지정하여 장벽의 기본 동작을 재정의할 수 있습니다. 그러나 이러한 플래그를 사용하면 성능에 영향을 줄 수 있습니다. 회전은 프로세서가 다른 스레드를 서비스하지 못하게 하는 반면, 조기 차단은 프로세서에서 스레드를 교환하고, 차단을 해제할 때 스레드를 깨우고, 프로세서로 다시 교환하는 오버헤드를 발생합니다. 일반적으로 성능 테스트가 애플리케이션이 이점을 얻을 수 있음을 나타내는 경우에만 장벽이 스레드를 관리하고 이러한 플래그를 사용하도록 허용하는 것이 좋습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8 [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2012 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 synchapi.h
라이브러리 Kernel32.lib
DLL Kernel32.dll

참고 항목

DeleteSynchronizationBarrier

InitializeSynchronizationBarrier

동기화 장벽

VBS Enclave에서 사용할 수 있는 Vertdll API