Функция TryEnterCriticalSection (synchapi.h)

Пытается войти в критически важный раздел без блокировки. Если вызов выполнен успешно, вызывающий поток берет на себя ответственность за критически важный раздел.

Синтаксис

BOOL TryEnterCriticalSection(
  [in, out] LPCRITICAL_SECTION lpCriticalSection
);

Параметры

[in, out] lpCriticalSection

Указатель на объект критического раздела.

Возвращаемое значение

Если критический раздел успешно введен или текущий поток уже владеет критическим разделом, возвращаемое значение будет ненулевым.

Если критический раздел уже принадлежит другому потоку, возвращаемое значение равно нулю.

Комментарии

Потоки одного процесса могут использовать объект критического раздела для синхронизации с взаимным исключением. Этот процесс отвечает за выделение памяти, используемой объектом критического раздела, что можно сделать, объявив переменную типа CRITICAL_SECTION. Перед использованием критического раздела некоторый поток процесса должен вызвать функцию InitializeCriticalSection или InitializeCriticalSectionAndSpinCount для инициализации объекта.

Чтобы обеспечить взаимоисключающее использование общего ресурса, каждый поток вызывает функцию EnterCriticalSection или TryEnterCriticalSection , чтобы запросить владение критически важным разделом перед выполнением любого раздела кода, использующего защищенный ресурс. Разница заключается в том, что TryEnterCriticalSection возвращается немедленно, независимо от того, получил ли он право собственности на критически важный раздел, в то время как EnterCriticalSection блокируется до тех пор, пока поток не сможет стать владельцем критического раздела. Завершив выполнение защищенного кода, поток использует функцию LeaveCriticalSection , чтобы отказаться от владения, что позволяет другому потоку стать владельцем и получить доступ к защищенному ресурсу. Поток должен вызывать LeaveCriticalSection один раз при каждом входе в критически важный раздел.

Любой поток процесса может использовать функцию DeleteCriticalSection для освобождения системных ресурсов, выделенных при инициализации объекта критического раздела. После вызова этой функции объект критического раздела больше не может использоваться для синхронизации.

Если поток завершается, когда он владеет критически важным разделом, состояние критического раздела не определено.

Чтобы скомпилировать приложение, использующее эту функцию, определите _WIN32_WINNT как 0x0400 или более поздней версии. Дополнительные сведения см. в разделе Использование заголовков Windows.

Требования

   
Минимальная версия клиента Windows XP [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2003 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header synchapi.h (включая Windows.h в Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Библиотека Kernel32.lib
DLL Kernel32.dll

См. также

Критически важные объекты раздела

DeleteCriticalSection

EnterCriticalSection

InitializeCriticalSection

InitializeCriticalSectionAndSpinCount

LeaveCriticalSection

Функции синхронизации

API-интерфейсы Vertdll, доступные в анклавах VBS