É SetEvent atômica?
-
06-07-2019 - |
Pergunta
É seguro ter 2 ou mais segmentos chamar SetEvent do Win32 API no mesmo manipulador de eventos não sendo protegido por uma seção crítica?
Solução
É seguro, mas lembre-se que, se um Sets segmento em que, e outro segmento define-lo, ao mesmo tempo, você não vai conseguir duas notificações, apenas um; desde o 2º um mudou de True para ... True. Se você está preocupado com isso, use Semáforos vez.
Outras dicas
Supondo que você tenha múltiplas threads esperando no mesmo evento, executando o mesmo código.
- Se o seu doesnt código de limpar o evento até seu processamento feito, você efetivamente tem um CS. Desde os restos de eventos sinalizados até que seja limpa (aka não AutoReset), tendo vários segmentos sinalizar o nada faz, exceto rotação da CPU.
- Se o seu código limpa-lo no início do tratamento ou o evento é autorset, então você teria múltiplas threads em execução a mesma função, que não é seguro se estes tópicos share nada.
não há restrições na chamada SetEvent de vários segmentos.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow