SetEvent是原子的吗?
-
06-07-2019 - |
题
让2个或更多线程在不受关键部分保护的同一事件处理程序上调用Win32 API的SetEvent是否安全?
解决方案
这是安全的,但请记住,如果一个线程设置它,另一个线程同时设置它,你将不会得到两个通知,只有一个;因为第二个将它从True改为......真。如果您对此感到担心,请改用信号量。
其他提示
假设你有多个线程在同一个事件上等待,运行相同的代码。
- 如果您的代码在完成处理之前没有清除事件,那么您实际上有一个CS。由于事件一直保持信号状态,直到它被清除(也就是非自动复位),有多个线程信号,除了旋转CPU之外什么都不做。
- 如果您的代码在处理开始时清除它或者事件是autorset,那么您将有多个线程运行相同的函数,如果这些线程共享任何内容,这是不安全的。 醇>
从多个线程调用SetEvent没有任何限制。
不隶属于 StackOverflow