2008-11-05 62 views
1

是否有2个或更多的线程在同一个事件处理程序中调用Win32 API的SetEvent时不安全?SetEvent是原子吗?

+1

看看这个链接,它可能会解决您的疑虑:http://blogs.msdn.com/oldnewthing/archive/2009/05/22/9634511.aspx – Andrey 2009-05-26 20:03:48

回答

1

这是安全的,但要记住,如果一个线程设置它,另一个线程同时设置它,你不会得到两个通知,只有一个;因为第二个将它从True改为...是真的。如果你担心这个问题,请使用Semaphores。

0

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

  1. 如果您的代码在完成处理之前未清除该事件,那么您实际上拥有一个CS。由于事件一直处于信号状态,直到它被清除(又称为非自动复位),除非旋转CPU,否则多线程会发出信号。
  2. 如果你的代码在处理开始时清除它,或者事件是autorset,那么你将有多个线程运行相同的函数,如果这些线程共享任何东西,这是不安全的。
0

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

相关问题