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 |
标头 | synchapi.h (包括 Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2) |
Library | Kernel32.lib |
DLL | Kernel32.dll |