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

有帮助吗?

解决方案

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

其他提示

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top