다음을 통해 공유


ERESOURCE 루틴 소개

시스템은 ERESOURCE 구조를 획득 및 해제하고 현재 상태를 검사하는 루틴을 제공합니다.

ERESOURCE 구조 획득 및 해제

드라이버는 ERESOURCE 구조를 사용하여 배타적/공유 동기화를 구현할 수 있습니다. 단독/공유 동기화는 다음과 같이 작동합니다.

  • 모든 스레드가 공유된 ERESOURCE를 획득할 수 있습니다.

  • 하나의 스레드만 ERESOURCE를 독점적으로 획득할 수 있습니다. ERESOURCE는 공유로 이미 획득한 스레드가 없는 경우에만 독점적으로 획득할 수 있습니다.

현재 ERESOURCE를 획득할 수 없는 스레드는 ERESOURCE를 획득할 수 있을 때까지 선택적으로 대기 상태로 설정할 수 있습니다. 시스템은 ERESOURCE를 기다리는 두 개의 스레드 목록인 배타적 웨이터 목록과 공유 웨이터 목록을 유지 관리합니다.

배타적/공유 동기화의 일반적인 용도는 읽기/쓰기 잠금을 구현하는 것입니다. 읽기/쓰기 잠금을 사용하면 여러 스레드가 읽기 작업을 수행할 수 있지만 한 번에 하나의 스레드만 쓸 수 있습니다. 이는 ERESOURCE를 획득하는 측면에서 직접 구현할 수 있습니다.

드라이버는 ERESOURCE에 대한 스토리지를 할당하고 ExInitializeResourceLite를 사용하여 초기화합니다. 시스템은 사용 중인 모든 ERESOURCE 구조 목록을 유지 관리합니다. 드라이버에 더 이상 특정 ERESOURCE가 필요하지 않은 경우 ExDeleteResourceLite 를 호출하여 시스템 목록에서 삭제해야 합니다. 또한 드라이버는 ExReinitializeResourceLite를 호출하여 ERESOURCE를 다시 사용할 수 있습니다.

드라이버는 ERESOURCE에서 다음과 같은 기본 작업을 수행할 수 있습니다.

  • ExAcquireResourceSharedLite와 공유되는 ERESOURCE를 획득합니다. 이 루틴은 리소스가 독점적으로 획득되지 않았고 배타적 웨이터가 없는 경우에만 리소스를 획득합니다.

  • ExAcquireResourceExclusiveLite를 사용하여 독점적으로 ERESOURCE를 획득합니다. 이 루틴은 단독으로 또는 공유로 리소스를 획득하지 않은 한 리소스를 획득합니다.

  • ExConvertExclusiveToSharedLite를 사용하여 단독 취득을 공유 인수로 변환합니다.

  • ExReleaseResourceLite를 사용하여 획득한 리소스를 해제합니다.

ExAcquireResourceSharedLiteExAcquireResourceExclusiveLiteWait 매개 변수는 현재 스레드가 ERESOURCE 획득을 기다리는지 여부를 결정합니다. FALSE 값을 지정하고 ERESOURCE를 가져올 수 없는 경우 루틴은 FALSE를 반환합니다. TRUE 값을 지정하면 현재 스레드가 ERESOURCE에 대한 적절한 대기 목록에 배치됩니다.

ERESOURCE 구조체의 상태 검사

드라이버는 다음과 같이 ERESOURCE의 현재 상태를 확인할 수도 있습니다.