同步对象

同步对象是一个对象,可以在其中一个等待函数中指定其句柄,以协调多个线程的执行。 多个进程可以具有同一同步对象的句柄,使进程间同步成为可能。

以下对象类型专用于同步。

类型 说明
事件 通知一个或多个正在等待的线程已发生事件。 有关详细信息,请参阅 事件对象
Mutex 一次只能由一个线程拥有,使线程能够协调对共享资源的互斥访问。 有关详细信息,请参阅 互斥对象
Semaphore 维护零和某个最大值之间的计数,从而限制同时访问共享资源的线程数。 有关详细信息,请参阅 Semaphore 对象
可等待计时器 通知一个或多个等待线程已到达指定时间。 有关详细信息,请参阅 可等待计时器对象

 

以下对象虽然可用于其他用途,但也可用于同步。

Object 说明
更改通知 FindFirstChangeNotification 函数创建,其状态设置为在指定目录或目录树中发生指定类型的更改时发出信号。 有关详细信息,请参阅 获取目录更改通知
控制台输入 在创建控制台时创建。 指定 CONIN$ 时, 由 CreateFile 函数或 GetStdHandle 函数返回控制台输入的句柄。 当主机的输入缓冲区中存在未读输入时,其状态设置为信号;当输入缓冲区为空时,其状态设置为“未对齐”。 有关控制台的详细信息,请参阅 字符模式应用程序
作业 通过调用 CreateJobObject 函数创建。 作业对象的状态设置为在终止其所有进程时发出信号,因为已超出指定的作业结束时间限制。 有关作业对象的详细信息,请参阅 作业对象
内存资源通知 CreateMemoryResourceNotification 函数创建。 其状态设置为在物理内存中发生指定类型的更改时发出信号。 有关内存的详细信息,请参阅 内存管理
进程 通过调用 CreateProcess 函数创建。 进程运行时,其状态设置为“未对齐”,并在进程终止时设置为“已发出信号”。 有关进程的详细信息,请参阅 进程和线程
线程 通过调用 CreateProcessCreateThreadCreateRemoteThread 函数创建新线程时创建。 当线程运行时,其状态设置为“非对齐”,并在线程终止时设置为“已发出信号”。 有关线程的详细信息,请参阅 进程和线程

 

在某些情况下,还可以使用文件、命名管道或通信设备作为同步对象;但是,不建议将其用于此目的。 请改用异步 I/O 并等待 在 OVERLAPPED 结构中设置的事件对象。 使用事件对象更安全,因为在同一文件、命名管道或通信设备上执行多个同时重叠操作时,可能会出现混淆。 在这种情况下,无法知道哪个操作导致对象状态被发出信号。

有关文件、命名管道或通信的 I/O 操作的其他信息,请参阅 同步和重叠输入和输出