同步对象
同步对象 是一个对象,其句柄可以在其中一个 等待函数中指定, 协调多个线程的执行。 多个进程可以处理同一同步对象,从而使进程间同步成为可能。
以下对象类型专用于同步。
类型 | 描述 |
---|---|
事件 | 通知一个或多个等待线程已发生事件。 有关详细信息,请参阅 事件对象。 |
Mutex | 一次只能由一个线程拥有,使线程能够协调对共享资源的互斥访问。 有关详细信息,请参阅 互斥体对象。 |
信号 | 维护介于零和一些最大值之间的计数,限制同时访问共享资源的线程数。 有关详细信息,请参阅 信号灯对象。 |
可等待计时器 | 通知一个或多个等待线程指定的时间已到达。 有关详细信息,请参阅 可等待计时器对象。 |
尽管可用于其他用途,但以下对象也可用于同步。
对象 | 描述 |
---|---|
更改通知 | FindFirstChangeNotification 函数创建,其状态设置为在指定目录或目录树内发生指定类型的更改时发出信号。 有关详细信息,请参阅 获取目录更改通知。 |
控制台输入 | 创建控制台时创建。 指定 CONIN$ 时,CreateFile 函数或 GetStdHandle 函数返回控制台输入的句柄。 当控制台的输入缓冲区中存在未读输入时,其状态设置为信号,并在输入缓冲区为空时设置为非对齐状态。 有关控制台的详细信息,请参阅 Character-Mode 应用程序 |
工作 | 通过调用 CreateJobObject 函数创建。 当作业对象的所有进程都终止时,作业对象的状态将设置为信号,因为指定的作业结束时间限制已超出。 有关作业对象的详细信息,请参阅 作业对象。 |
内存资源通知 | 由 CreateMemoryResourceNotification 函数创建。 当指定类型的更改在物理内存中发生时,其状态设置为信号。 有关内存的详细信息,请参阅 内存管理。 |
过程 | 通过调用 CreateProcess 函数创建。 其状态在进程运行时设置为非对齐状态,并在进程终止时设置为信号。 有关进程的详细信息,请参阅 进程和线程。 |
线 | 通过调用 CreateProcess、CreateThread或 CreateRemoteThread 函数创建新线程时创建。 其状态在线程运行时设置为非对齐状态,并在线程终止时设置为信号。 有关线程的详细信息,请参阅 进程和线程。 |
在某些情况下,还可以使用文件、命名管道或通信设备作为同步对象;但是,不建议将其用于此目的。 请改用异步 I/O 并在 重叠 结构中设置的事件对象上等待。 由于在同一文件、命名管道或通信设备上执行多个同时重叠作时,可能会发生混淆,因此使用事件对象更安全。 在这种情况下,无法知道哪个作导致对象的状态发出信号。
有关文件、命名管道或通信的 I/O作的其他信息,请参阅 同步和重叠输入和输出。