Функция TryEnterCriticalSection пытается входить в критическую секцию без блокирования. Если вызов успешен, вызывающий поток забирает в монопольное использование критическую секцию.
Синтаксис
BOOL TryEnterCriticalSection( LPCRITICAL_SECTION lpCriticalSection // критическая секция ); |
Параметры
lpCriticalSection
[in/out] Указатель на объект критической секции.Возвращаемые значения
Если произошел успешный вход в критическую секцию или текущий поток уже владеет критической секцией, возвращаемое значение не нуль.
Если другой поток уже владеет критической секцией, возвращаемое значение равняется нулю.
Замечания
Потоки отдельно взятого процесса могут использовать объект критической секции для синхронизации взаимоблокировки. Процесс несет ответственность за распределение памяти, используемой объектом критической секции, который это может сделать, объявляя переменную типа CRITICAL_SECTION. Перед использованием критической секции, некий поток процесса должен вызвать функцию InitializeCriticalSection или InitializeCriticalSectionAndSpinCount, чтобы инициализировать объект.
Чтобы включить в работу взаимоисключающее использование разделяемого ресурса, каждый поток вызывает функцию EnterCriticalSection или TryEnterCriticalSection, чтобы запросить монопольное использование критической секции перед выполнением какой-либо части кода, который использует защищенный ресурс. Различие в том, что функция TryEnterCriticalSection возвращает значение немедленно, независимо от того, получил или нет поток в монопольное использование критическую секцию, в то время как функция EnterCriticalSection блокирует до тех пор, пока поток не сможет взять в монопольное использование критическую секцию. Когда поток закончит исполнять защищенный код, он использует функцию LeaveCriticalSection, чтобы освободить монопольное использование, давая возможность другому потоку стать монопольным пользователем и получить доступ к защищенному ресурсу. Поток должен вызывать LeaveCriticalSection в этой связи каждый раз, когда он входит в критическую секцию. .
Любой поток процесса может использовать функцию DeleteCriticalSection, чтобы освободить системные ресурсы, которые были распределены, когда объект критической секции был инициализирован. После того, как эта функция вызвалась, объект критической секции больше не может использоваться для синхронизации.
Если работа потока завершается в то время, когда он имеет в монопольном использовании критическую секцию, состояние критической секции - неопределеное.
Чтобы компилировать приложение, которое использует эту функцию, определите макрос _WIN32_WINNT как 0x0400 или позже. Дополнительную информацию, см. в статье Использование заголовочных файлов SDK.
Смотри также
Краткий обзор Синхронизация, Функции, используемые синхронизацией, DeleteCriticalSection, EnterCriticalSection, InitializeCriticalSection, InitializeCriticalSectionAndSpinCount, LeaveCriticalSection
Размещение и совместимость TryEnterCriticalSection |
|
Windows. NET Server |
Да |
Windows XP |
Да |
Windows 2000 |
Да |
Windows NT |
Да версии 4.0 и выше |
Windows Me |
Нет |
Windows 98 |
Нет |
Windows 95 |
Нет |
Используемая библиотека |
Kernel32.lib |
Заголовочный файл |
|
- объявлено в |
Winbase.h |
- включено в |
Windows.h |
Unicode |
Нет |
Замечания по платформе |
Не имеется |