Initializes a push lock variable.
void ExInitializePushLock( PEX_PUSH_LOCK PushLock );
[Out] Pointer to the caller-supplied storage, which must be at least the value of sizeof(EX_PUSH_LOCK), for the push lock variable to be initialized. The storage must be 4-byte aligned on 32-bit platforms, and 8-byte aligned on 64-bit platforms.
Push locks are similar to ERESOURCE structures (also called "resources") in the following ways:
- Push locks can be used for synchronization by a set of threads.
- Push locks can be acquired for shared or exclusive access.
- Although the caller provides the storage for the push lock variable, the EX_PUSH_LOCK structure is opaque: that is, its members are reserved for system use.
Push locks offer the following advantages over ERESOURCE structures:
- When push locks are mostly acquired for shared access, they are more efficient than ERESOURCE structures.
- The storage for push locks can be allocated from paged or nonpaged pool. ERESOURCE structures must be allocated only from nonpaged pool.
- EX_PUSH_LOCK structures are much smaller than ERESOURCE structures.
Push locks have the following disadvantages when compared with ERESOURCE structures:
- The algorithm for granting exclusive access is not fair to all threads. If there is a high level of exclusive-lock contention, there is no guarantee about the order in which threads will be granted exclusive access.
- There are no support routines for determining the current owner of a push lock. (Users of ERESOURCE structures can call routines such as ExIsResourceAcquiredExclusiveLite to determine whether the current thread has exclusive access to the resource.)
- Push locks cannot be acquired recursively.
|Minimum supported client||Windows 10, version 1809|
We'd love to hear your thoughts. Choose the type you'd like to provide:
Our feedback system is built on GitHub Issues. Read more on our blog.