2010-11-09 4 views
2

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

1

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.

4

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.

+0

@DeadGMG Merci pour la réponse. Je suppose que vous parlez d'instructions comme CMPXCHG qui fait partie des processeurs Intel? – Fanatic23

+0

+1 pour TANSTAAFL. :) –

+0

@Fanatic: Et vous devez aussi comprendre comment ils fonctionnent. – Puppy

Questions connexes