2008-11-05 6 views
1

Est-il sûr d'avoir 2 ou plusieurs threads appeler SetEvent de l'API Win32 sur le même gestionnaire d'événements n'étant pas protégé par une section critique?Est-ce que SetEvent est atomique?

+1

jetez un coup d'oeil à ce lien, il pourrait répondre à vos préoccupations: http://blogs.msdn.com/oldnewthing/archive/2009/05/22/9634511.aspx – Andrey

Répondre

1

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, juste une; puisque le 2ème l'a changé de Vrai à ... Vrai. Si cela vous inquiète, utilisez des sémaphores à la place.

0

En supposant que plusieurs threads attendent sur le même événement, exécutez le même code.

  1. Si votre code n'efface pas l'événement jusqu'à son traitement terminé, vous avez effectivement un CS. Puisque l'événement reste signalé jusqu'à ce qu'il soit effacé (alias pas autoreset), avoir plusieurs threads signalent que rien ne fait que tourner le CPU.
  2. Si votre code l'efface au début du traitement ou si l'événement est un autorset, plusieurs threads exécuteront la même fonction, ce qui n'est pas sûr si ces threads partagent quelque chose.
0

Il n'existe aucune restriction sur l'appel de SetEvent à partir de plusieurs threads.

Questions connexes