J'écris les collections simultanées, mais ils semblent utiliser le verrouillage normal sous la hotte. Y a-t-il de bons exemples dans la framework .NET qui utilise cette construction de verrouillage? P>
J'ai initialement examiné la concurrence. J'ai vu qu'il utilisait des verrous normaux, mais la classe de blocageCollection utilise Spinwait dans ses méthodes internes. P>
3 Réponses :
Que voulez-vous dire par verrouillage normal em>? Une sorte de Si oui, vous devez regarder verrouillage (objet) {...} code> construction? P>
ConcurrentStack code> par exemple, il utilise un
spinwait code> pour son travail. P>
À peu près n'importe laquelle de la classe de collecte simultanée à faible serrure utilisera probablement une combinaison de spinwait code> et
rendement code>. Bien que
concurrentdictionner code> est une exception notable. La liste des classes que j'ai trouvées incluent les suivantes. P>
ConcurrentStack et Concurrentqueue sont des collections sans verrouillage, cependant concurrentdictionnaires, ConcurrentBag utilise des serrures. BlockingCollections est juste un conteneur de sorte qu'il ne s'agit pas d'une collection en soi, il doit envelopper d'autres collections de threadsafe, par exemple Var BC = Nouveau blocageCollection (Nouvelle ConcurrentStack ()); P>
Ceci est un article d'introduction sur la manière d'utiliser Spinwait dans le code sans verrouillage http://www.emadomara.com/2011/08 /spinwait-and-lock-free-code.html P>
Pourquoi ferais-tu ça? Spin Lock est un mécanisme d'attente occupé, c'est-à-dire en utilisant des ressources sans rien faire utile
Purement éducatif. Je ne pense pas que je devrais jamais faire ça. Mais je veux juste en savoir plus à ce sujet et regarder un exemple décent. La plupart des exemples sont tout à fait conçus au mieux.
Que vous ne pouvez pas sembler trouver des exemples de vie réels dit déjà beaucoup à mon avis.
@Daniel: vrai :). Mais ils l'ont inclus pour une raison. Je veux juste en savoir plus à ce sujet.