TryEnterCriticalSection()
выполняет следующие действия:
- пытается войти в критическую секцию
- , если эта секция в настоящий момент захвачена каким-либо другим потоком, секция не вводится, и функция возвращаетноль, иначе
- раздел введен и функция возвращает ненулевое значение
В любом случае функция никогда не блокируется.Сравните его с EnterCriticalSection()
, который проваливается, если ни один другой поток не ввел критическую секцию, и блокирует, если такой другой поток существует.
Таким образом, результат вашего кода будет зависеть от того, введена ли критическая секция другим потокомна данный момент функция вызывается.Не забывайте вызывать LeaveCriticalSection()
каждый раз, когда TryEnterCriticalSection()
возвращает ненулевое значение (успешно).
Так что да, ваш код написан с правильными предположениями.