Question

Est-il prudent que deux ou plusieurs threads appellent SetEvent de l'API Win32 sur le même gestionnaire d'événements qui n'est pas protégé par une section critique?

Était-ce utile?

La solution

C'est sûr, mais rappelez-vous que si un thread le définit et qu'un autre thread le définit en même temps, vous n'obtiendrez pas deux notifications, mais une seule; depuis le 2e, il est passé de True à ... True. Si cela vous inquiète, utilisez plutôt Sémaphores.

Autres conseils

En supposant que plusieurs threads attendent le même événement et exécutent le même code.

  1. Si votre code ne nettoie pas l'événement avant son traitement, vous avez effectivement un CS. Étant donné que l'événement reste signalé jusqu'à ce qu'il soit effacé (autrement dit, pas de réinitialisation automatique), plusieurs threads signalent que rien ne se passe sauf que le processeur tourne.
  2. Si votre code le supprime au début du traitement ou si l'événement est autorset, plusieurs threads exécutent la même fonction, ce qui n'est pas sûr si ces threads partagent quelque chose.

l'appel de SetEvent à partir de plusieurs threads n'est pas limité.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top