2

有 2 个或更多线程在不受关键部分保护的同一事件处理程序上调用 Win32 API 的 SetEvent 是否安全?

4

3 回答 3

1

这是安全的,但请记住,如果一个线程设置它,而另一个线程同时设置它,您将不会收到两个通知,只会收到一个;由于第二个将其从 True 更改为... True。如果您对此感到担心,请改用信号量。

于 2009-05-26T17:57:48.253 回答
0

假设您有多个线程等待同一个事件,运行相同的代码。

  1. 如果您的代码在完成处理之前没有清除事件,那么您实际上有一个 CS。由于事件在被清除之前一直保持信号状态(又名不是自动重置),因此拥有多个线程信号除了旋转 CPU 之外什么都不做。
  2. 如果您的代码在处理开始时将其清除或事件是自动设置的,那么您将有多个线程运行相同的函数,如果这些线程共享任何内容,这是不安全的。
于 2008-11-05T14:03:40.723 回答
0

从多个线程调用 SetEvent 没有任何限制。

于 2009-05-26T17:55:13.860 回答