ExInitializePushLock 함수(wdm.h)

푸시 잠금 변수를 초기화합니다.

구문

void ExInitializePushLock(
  [Out] PEX_PUSH_LOCK PushLock
);

매개 변수

[Out] PushLock

푸시 잠금 변수를 초기화하려면 최소한 sizeof(EX_PUSH_LOCK) 값이어야 하는 호출자 제공 스토리지에 대한 포인터입니다. 스토리지는 32비트 플랫폼에서 4 바이트를 정렬하고 64비트 플랫폼에서 8 바이트를 정렬해야 합니다.

반환 값

없음

설명

푸시 잠금은 다음과 같은 방법으로 ERESOURCE 구조("리소스"라고도 함)와 유사합니다.

  • 푸시 잠금은 스레드 집합의 동기화에 사용할 수 있습니다.
  • 공유 또는 단독 액세스를 위해 푸시 잠금을 획득할 수 있습니다.
  • 호출자가 푸시 잠금 변수에 대한 스토리지를 제공하지만 EX_PUSH_LOCK 구조는 불투명합니다. 즉, 해당 멤버는 시스템 사용을 위해 예약되어 있습니다.

푸시 잠금은 ERESOURCE 구조에 비해 다음과 같은 이점을 제공합니다.

  • 공유 액세스를 위해 푸시 잠금을 대부분 획득하는 경우 ERESOURCE 구조보다 더 효율적입니다.
  • 푸시 잠금에 대한 스토리지는 페이징된 풀 또는 비페이지 풀에서 할당할 수 있습니다. ERESOURCE 구조체는 비페이지 풀에서만 할당되어야 합니다.
  • EX_PUSH_LOCK 구조체는 ERESOURCE 구조체보다 훨씬 작습니다.

푸시 잠금은 ERESOURCE 구조와 비교할 때 다음과 같은 단점이 있습니다.

  • 배타적 액세스 권한을 부여하는 알고리즘은 모든 스레드에 공평하지 않습니다. 높은 수준의 배타적 잠금 경합이 있는 경우 스레드에 배타적 액세스 권한이 부여되는 순서에 대한 보장은 없습니다.
  • 푸시 잠금의 현재 소유자를 결정하기 위한 지원 루틴은 없습니다. (ERESOURCE 구조의 사용자는 ExIsResourceAcquiredExclusiveLite와 같은 루틴을 호출하여 현재 스레드가 리소스에 대한 단독 액세스 권한이 있는지 여부를 확인할 수 있습니다.)
  • 푸시 잠금은 재귀적으로 획득할 수 없습니다.

단독 액세스를 위한 푸시 잠금을 획득하거나 해제하려면 각각 ExAcquirePushLockExclusive 또는 ExReleasePushLockExclusive를 호출합니다.

공유 액세스에 대한 푸시 잠금을 획득하거나 해제하려면 각각 ExAcquirePushLockShared 또는 ExReleasePushLockShared를 호출합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 10, 버전 1809
머리글 wdm.h