TryEnterCriticalSection
[New
- Windows NT]
The TryEnterCriticalSection
function attempts to enter a critical section without blocking. If the call is
successful, the calling thread takes ownership of the critical section.
BOOL TryEnterCriticalSection(
|
LPCRITICAL_SECTION lpCriticalSection |
// pointer to critical section object |
|
); |
|
Parameters
lpCriticalSection
Specifies the
critical section object.
Return Values
If the
critical section is successfully entered or the current thread already owns the
critical section, the return value is nonzero.
If another
thread already owns the critical section, the return value is zero.
Remarks
The threads
of a single process can use a critical section object for mutual-exclusion
synchronization. The process is responsible for allocating the memory used by a
critical section object, which it can do by declaring a variable of type
CRITICAL_SECTION. Before using a critical section, some thread of the process
must call the InitializeCriticalSection function to initialize the object.
To enable
mutually exclusive use of a shared resource, each thread calls the EnterCriticalSection or TryEnterCriticalSection
function to request ownership of the critical section before executing any
section of code that uses the protected resource. The difference is that TryEnterCriticalSection
returns immediately, regardless of whether it obtained ownership of the
critical section, while EnterCriticalSection blocks until the thread can
take ownership of the critical section. When it has finished executing the
protected code, the thread uses the LeaveCriticalSection function to relinquish
ownership, enabling another thread to become the owner and gain access to the
protected resource. The thread must call LeaveCriticalSection once for
each time that it entered the critical section.
Any thread of
the process can use the DeleteCriticalSection function to release the
system resources that were allocated when the critical section object was
initialized. After this function has been called, the critical section object
can no longer be used for synchronization.
See Also