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
A
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.
- 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.
- 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
- 1. Est-ce que changer un pointeur est considéré comme une action atomique dans C?
- 2. Ce qui est plus rapide: SetEvent, SendMessage, PostMessage
- 3. Est-ce que x86 a un incrément atomique qui conserve la valeur qui a été stockée?
- 4. Modification atomique de fichiers sur plusieurs réseaux
- 5. Win32: Exécution atomique du bloc de code
- 6. L'implémentation de ClearCase majoritairement atomique valide
- 7. Implémentation du modèle atomique C++ 0x
- 8. Comment puis-je structurer une table pour que le champ reste atomique?
- 9. Est-ce que AtomicBoolean n'a pas de méthode negate()?
- 10. Quelle est la meilleure façon de remplacer un fichier atomique multi-plateforme en Perl?
- 11. Meilleure façon de créer des fichiers de manière atomique
- 12. Copie atomique d'une table MySQL plutôt qu'une autre?
- 13. Faire l'insertion d'un caractère unique dans vim une opération atomique
- 14. Flux atomique StackOverflow à utiliser avec VS2008 Page de démarrage
- 15. Windows: Dans quelles circonstances SetEvent() ne peut-il pas retourner immédiatement?
- 16. Accéder à Win32 CreateEvent/SetEvent à partir de WSH ou d'un autre programme Windows natif
- 17. Que * est * un IPM.DistList?
- 18. Est-ce que Linq2XSD est mort?
- 19. Est-ce que ce setter est 'diabolique'
- 20. Java: Est-ce que SelectionKey.attach() est cassé?
- 21. Est-ce que IMUL AX est valide?
- 22. Est-ce que cette classe est threadsafe?
- 23. Est-ce que '@' est utilisé en C++?
- 24. Est-ce que PHP est international?
- 25. Est-ce que cette requête me garantit une valeur PK «sans race»?
- 26. Est-ce que c'est nécessaire?
- 27. Est-ce que MKMapView fuit
- 28. Est-ce que sed bloque?
- 29. Est-ce que free() défragmente?
- 30. Puis-je incrémenter de manière atomique un compteur de 16 bits sur x86/x86_64?
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