我正在尝试使用事件(手动重置)来表示已经进行了文件更改。我有一个场景,线程A调用SetEvent,线程B和C正在检查事件是否已发出信号。当B或C检测到事件已经发出信号时,他们重置事件并做一些工作。我的问题是,当线程B重置事件时,线程C是否仍然注册事件已发出信号?
答案 0 :(得分:3)
Windows不维护每线程事件状态。事件是否发出信号,并且所有线程都将看到相同的状态。
如果有两个线程正在等待一个事件,并且两个线程在发出信号后重置该事件,则存在一个线程根本看不到信号的风险(因为另一个线程已经重置了它)。 / p>
您需要一个同步机制,以便只有在检查它的所有线程都看到新状态时才重置事件(例如,每个线程递减的原子计数器,并且事件仅在达到0时重置)。
根据您的应用,信号量可能更合适。