Функция TryEnterCriticalSection


Функция 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

Нет

Замечания по платформе

Не имеется


Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz