Comment concevoir un programme multithread C pour éviter Sémaphore Mutex ConcurrencySémaphore Mutex Concurrency dans le programme d'émission multithread C
Répondre
Il y a quelques façons.
Le meilleur moyen consiste à éliminer toutes les données partagées entre les threads. Bien que ce ne soit pas toujours pratique, il est toujours bon d'éliminer autant de données partagées que possible. Après cela, vous devez commencer à vous intéresser à la programmation sans verrou. La programmation sans clé est un peu la mode en ce moment, mais le secret est que c'est souvent une bien meilleure idée d'utiliser la concurrence basée sur les verrous comme les mutex et les sémaphores. La programmation sans clé est très difficile à obtenir correctement. Recherchez les articles de Herb Sutter sur le sujet, ou la page wikipedia. Il y a beaucoup de bonnes ressources sur la synchronisation sans clé.
Quelque part entre les sections critiques. Si vous programmez sur Windows, les sections critiques devraient être préférées aux mutex car elles font un peu de travail pour éviter la surcharge des verrous de mutex et des déverrouillages complets. Essayez-les d'abord, et si vos performances sont inacceptables (ou si vous ciblez des plates-formes sans sections critiques), vous pouvez vous pencher sur des techniques sans clé.
Il est préférable de programmer moins de code. C'est dur, mais possible.
Assurez-vous de passe sur structures de données entre les threads, toujours savoir quel fil les données exclusivement appartient. Si vous utilisez (comme mentionné par Dan avant) e.q. files d'attente sans clé pour transmettre vos données, vous ne devriez pas rencontrer trop de problèmes de concurrence (car votre code se comporte beaucoup plus comme n'importe quel autre code qui attend l'arrivée de certaines données).
Toutefois, si vous migrez du code single-to-multithread, il s'agit d'une bête totalement différente. C'est très difficile. Et la plupart du temps il n'y a pas de solutions élégantes.
En outre, jetez un oeil à InterlockedXXX
série pour effectuer un fonctionnement atomique dans un environnement multithread.
- InterlockedIncrement Fonction
- InterlockedDecrement Fonction
- InterlockedExchange Fonction
- 1. Qu'est-ce que le Mutex et le sémaphore In C#? où nous devons mettre en œuvre?
- 2. Quoi de mieux pour une file d'attente de messages? mutex & cond ou mutex et sémaphore?
- 3. émet .NET C# Socket Concurrency
- 4. Sémaphore de mémoire partagée
- 5. Interprocess Mutex En Perl
- 6. Migration de concurrency Java concurrency Scala
- 7. multithreading Sémaphore
- 8. Est-ce que ce fil est sûr? (données partagées sans mutex/sémaphore)
- 9. Moniteur vs Mutex en C#
- 10. Définition des autorisations d'accès sur le sémaphore?
- 11. Multiple fork() Concurrency
- 12. C++ dll dans le programme C
- 13. mysqli_use_result() et concurrency
- 14. Bibliothèques multithread pour Objective-C
- 15. Modèles de serveur réseau multithread en C#
- 16. Optimiste dans concurrency ADO.NET Entity Framework
- 17. A propos mutex dans Vista
- 18. Problème dans le sémaphore étant interrompu plusieurs fois
- 19. LINQ to SQL: Concurrency résolution
- 20. Obtenez une liste de mutex?
- 21. Débogueur multithread
- 22. Win32 Mutex n'attend pas
- 23. Mécanisme de délai d'attente de sémaphore en C#
- 24. Pourquoi verrouiller peut devenir un goulot d'étranglement de programme multithread?
- 25. Modification de la propriété/autorisations d'un sémaphore
- 26. Mutex Stored Procédure
- 27. Question à propos de sémaphore
- 28. Mutex ne fonctionne pas dans Vista
- 29. pthread_cond_wait ne déverrouille pas mutex
- 30. Pluriel du mot "mutex"