InitializeCriticalSection 函数 (synchapi.h)

初始化关键节对象。

语法

void InitializeCriticalSection(
  [out] LPCRITICAL_SECTION lpCriticalSection
);

参数

[out] lpCriticalSection

指向关键节对象的指针。

返回值

此函数不返回值。

Windows Server 2003 和 Windows XP: 在内存不足的情况下, InitializeCriticalSection 可能会引发 STATUS_NO_MEMORY 异常。 从 Windows Vista 开始,此异常已消除, 并且 InitializeCriticalSection 始终成功,即使在内存不足的情况下也是如此。

注解

单个进程的线程可以使用关键节对象进行互斥同步。 无法保证线程获取关键部分所有权的顺序,但是,系统对所有线程都是公平的。

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

初始化关键节对象后,进程的线程可以在 EnterCriticalSectionTryEnterCriticalSectionLeaveCriticalSection 函数中指定对象,以提供对共享资源的相互独占访问。 对于不同进程的线程之间的类似同步,请使用互斥对象。

无法移动或复制关键节对象。 进程也不能修改 对象,但必须将其视为逻辑不透明。 仅使用关键节函数来管理关键节对象。 使用完关键部分后,调用 DeleteCriticalSection 函数。

必须先删除关键节对象,然后才能重新初始化它。 初始化已初始化的关键节会导致未定义的行为。

要求

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

另请参阅

CreateMutex

关键节对象

DeleteCriticalSection

EnterCriticalSection

InitializeCriticalSectionAndSpinCount

LeaveCriticalSection

同步函数

TryEnterCriticalSection

VBS enclave 中可用的 Vertdll API