SetEvent è atomico?
-
06-07-2019 - |
Domanda
È sicuro che 2 o più thread chiamino SetEvent dell'API Win32 sullo stesso gestore di eventi non protetto da una sezione critica?
Soluzione
È sicuro, ma ricorda che se un thread lo imposta e un altro thread lo imposta allo stesso tempo, non riceverai due notifiche, solo una; dal momento che il 2 ° l'ha cambiato da Vero a ... Vero. Se sei preoccupato per questo, usa invece Semaphores.
Altri suggerimenti
Supponendo che tu abbia più thread in attesa dello stesso evento, eseguendo lo stesso codice.
- Se il tuo codice non cancella l'evento fino al suo termine, hai effettivamente un CS. Poiché l'evento rimane segnalato fino a quando non viene cancellato (noto anche come non autoreset), la presenza di più thread segnala che non fa altro che girare la CPU.
- Se il tuo codice lo cancella all'inizio dell'elaborazione o se l'evento è impostato automaticamente, allora avresti più thread che eseguono la stessa funzione, il che non è sicuro se questi thread condividono qualcosa.
non ci sono restrizioni sulla chiamata a SetEvent da più thread.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow