繁体   English   中英

为什么我们需要事件来同步线程?

[英]Why do we need events to synchronize threads?

例如,如果一次仅一个线程可以访问一个Critical Section ,为什么我们需要Events来同步2个线程以对其进行读写?

它们的使用方式有些重叠,但是两者都有一些独特的功能:

  1. 关键部分不能跨流程使用,而事件可以。
  2. 单个手动重置事件可用于一次释放多个线程。 关键部分不能。
  3. 事件与WaitForSingleObject()等兼容,而关键部分则不兼容。
  4. 线程可以使用WaitForMultipleObjects[Ex]()等待多个事件,但是它只能等待单个关键部分(使用其他API)。

等等。

他们并不是真正的直接竞争者。 最好将它们视为彼此互补

互斥体位于中间。 有关进一步的讨论,请参见互斥与关键部分有什么区别?

事件具有SetEvent函数,可将其用作信号。 例如,当一个线程完成读取文件或填充缓冲区时,它可以使用SetEvent在下一个处理该数据的步骤上启动另一个线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM