EnterCriticalSection

EnterCriticalSection waits for ownership of the specified critical-section object. The function returns when the calling thread is granted ownership.

Syntax

VOID EnterCriticalSection(
    LPCRITICAL_SECTION lpCriticalSection
);

Parameters

lpCriticalSection

A pointer to the critical-section object.

Return Value

This function does not return a value.

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 access to a shared resource, each thread calls the EnterCriticalSection function to request ownership of the critical-section before executing any section of code that accesses the protected resource. 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 owner and access the protected resource. The thread must call LeaveCriticalSection once for each time that it entered the critical-section. The thread enters the critical-section each time EnterCriticalSection succeeds.

Once a thread has ownership of a critical-section, it can make additional calls to EnterCriticalSection without blocking its execution. This prevents a thread from deadlocking itself while waiting for a critical-section that it already owns.

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.

Requirements

Minimum Supported Version RTX64 2013
Header windows.h
Library Rtx_Rtss.lib

See Also:

TryEnterCriticalSection

DeleteCriticalSection

InitializeCriticalSection

LeaveCriticalSection