J'ai lu des liens aléatoires sur des algorithmes non bloquants et leurs utilisations dans la programmation simultanée. Existe-t-il des bibliothèques utiles utilisant des algorithmes non bloquants avec C/C++ et quels types de structures de données concurrentes bénéficient le plus de l'utilisation d'algorithmes non bloquants? Merci.est la programmation simultanée non bloquante pour réel?
Répondre
boost::thread
utilise la sémantique compare-and-swap pour shared_mutex sous Windows - uniquement en cas de contention lorsqu'un appel de blocage est effectué (en utilisant des sémaphores).
Windows lui-même prend en charge l'utilisation d'un nombre de tours sur les sections critiques via InitializeCriticalSectionAndSpinCount pour tenter d'optimiser un bit pour les verrous haute contention sur les systèmes MP.
Microsoft a vraiment obtenu la religion sur les performances de threads et les codes gérés et natifs ont maintenant slimline reader-writer locks.
Cela me donne également une autre occasion de brancher un livre que j'ai attendu, car il a un chapitre sur ce sujet: C++ Concurrency in Action.
Il n'existe pas de verrou libre. Tous les algorithmes multithread utilisent la synchronisation. Vous pouvez obtenir des algorithmes sans verrou qui n'utilisent pas de verrous explicites mais qui reposent sur des opérations atomiques et d'autres "non-verrous", mais vous devez être un programmeur extrêmement bon - et connaître votre plate-forme cible et les détails d'implémentation cible CPU - afin d'écrire un tel algorithme. Les seuls algorithmes sans verrous qui fonctionnent réellement sont pour la 360, écrite par des ingénieurs de Microsoft, qui ont dû obtenir les documents de conception de la façon dont le processeur dans le 360 implémentait le verrouillage, avant qu'ils puissent réussir.
Un algorithme sans verrouillage C++ serait appliqué à trop de processeurs pour que cela fonctionne - vous ne pouviez pas simplement l'écrire au-dessus de boost :: thread.
- 1. Collecte simultanée non bloquante?
- 2. Motifs de conception pour la programmation simultanée?
- 3. Sémaphores et programmation simultanée
- 4. Test d'une file d'attente non bloquante
- 5. Programmation simultanée en Java
- 6. WPF: IU non bloquante
- 7. Allocation de mémoire Java non bloquante
- 8. Réception non bloquante en mpi + ocaml?
- 9. Boîte de dialogue non bloquante dans Applescript
- 10. Entrée de console non bloquante Python
- 11. Classe non-bloquante en python (Thread détaché)
- 12. en utilisant QTextStream pour lire stdin de manière non bloquante
- 13. Fonction d'attente non bloquante dans Objective-C
- 14. Création d'une socket non bloquante pour WinSocks et * nix
- 15. C++ Winsock socket non-bloquante/asynchrone UDP
- 16. Comment fonctionne une boucle d'événement non-bloquante?
- 17. Application Windows Mobile sans terminaison/non bloquante
- 18. Programmation sur un système en temps réel
- 19. MSMQ: Quelle est la meilleure façon de lire une file d'attente de manière non bloquante?
- 20. Mise à jour non bloquante à un DataGridView
- 21. Comment effectuer une lecture IPC non bloquante sous Windows?
- 22. Comment faire une extraction d'URL non bloquante en Python
- 23. Une façon simple et non bloquante de dormir?
- 24. IO # lit les blocs sur une prise non bloquante?
- 25. Windows: Comment afficher une fenêtre Alerte/Confirmation non bloquante?
- 26. Comportement incorrect de MacOSX select() sur une connexion non bloquante
- 27. Détection d'erreurs d'E/S dans une PRISE NON BLOQUANTE
- 28. Une implémentation de pool de mémoire thread-safe non bloquante
- 29. Cette fonction est-elle sûre pour une exécution simultanée?
- 30. La programmation orientée aspect est-elle utile pour fournir des implémentations pour la programmation par interface?
@DeadGMG Merci pour la réponse. Je suppose que vous parlez d'instructions comme CMPXCHG qui fait partie des processeurs Intel? – Fanatic23
+1 pour TANSTAAFL. :) –
@Fanatic: Et vous devez aussi comprendre comment ils fonctionnent. – Puppy