tryEnterCriticalSection 函数 (synchapi.h)

尝试进入关键部分而不发生阻塞。 如果调用成功,调用线程将获取关键部分的所有权。

语法

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

参数

[in, out] lpCriticalSection

指向关键节对象的指针。

返回值

如果成功输入关键节或当前线程已拥有关键节,则返回值为非零值。

如果另一个线程已拥有关键部分,则返回值为零。

注解

单个进程的线程可以使用关键节对象进行互斥同步。 进程负责分配关键节对象使用的内存,它可以通过声明 类型为 CRITICAL_SECTION 的变量来执行此操作。 在使用关键部分之前,进程的某个线程必须调用 InitializeCriticalSectionInitializeCriticalSectionAndSpinCount 函数来初始化对象。

为了允许共享资源的互斥使用,每个线程都会调用 EnterCriticalSectionTryEnterCriticalSection 函数来请求关键节的所有权,然后再执行使用受保护资源的任何代码部分。 区别在于 ,TryEnterCriticalSection 会立即返回,无论它是否获得了关键节的所有权,而 EnterCriticalSection 会阻止,直到线程可以获取关键节的所有权。 完成执行受保护代码后,线程使用 LeaveCriticalSection 函数放弃所有权,使另一个线程成为所有者并获取对受保护资源的访问权限。 每次进入关键部分时,线程都必须调用 LeaveCriticalSection 一次。

进程的任何线程都可以使用 DeleteCriticalSection 函数释放在初始化关键节对象时分配的系统资源。 调用此函数后,关键节对象不能再用于同步。

如果线程在拥有关键节的所有权时终止,则关键节的状态是不确定的。

若要编译使用此函数的应用程序, 请将 _WIN32_WINNT 定义为 0x0400 或更高版本。 有关详细信息,请参阅 使用 Windows 标头

要求

   
最低受支持的客户端 Windows XP [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2003 [桌面应用 | UWP 应用]
目标平台 Windows
标头 synchapi.h (包括 Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

关键节对象

DeleteCriticalSection

EnterCriticalSection

InitializeCriticalSection

InitializeCriticalSectionAndSpinCount

LeaveCriticalSection

同步函数

VBS enclave 中可用的 Vertdll API