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

时间:2014-03-29 20:04:30

标签: c winapi critical-section thread-synchronization

例如,如果一次只有一个线程可以访问Critical Section,为什么我们需要Events同步2个线程来读/写呢?

2 个答案:

答案 0 :(得分:1)

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

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

    他们并非真正处于直接竞争中;最好将它们视为彼此互补

    互斥体位于中间位置。有关进一步的讨论,请参阅What is the difference between mutex and critical section?

答案 1 :(得分:0)

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