SetEvent是原子的吗?

时间:2008-11-05 12:38:14

标签: multithreading winapi events atomic critical-section

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

  1. 如果您的代码在完成处理之前没有清除事件,那么您实际上有一个CS。由于事件一直保持信号状态,直到它被清除(也就是非自动复位),有多个线程信号,除了旋转CPU之外什么都不做。
  2. 如果您的代码在处理开始时清除它或者事件是autorset,那么您将有多个线程运行相同的函数,如果这些线程共享任何内容,这是不安全的。

答案 2 :(得分:0)

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