10
votes

Y a-t-il des exemples dans la framework .NET qui utilise Spintlock ou Spinwait?

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?


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.


4 commentaires

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.


3 Réponses :


4
votes

Que voulez-vous dire par verrouillage normal ? Une sorte de verrouillage (objet) {...} construction?

Si oui, vous devez regarder ConcurrentStack par exemple, il utilise un spinwait pour son travail.


0 commentaires

5
votes

À peu près n'importe laquelle de la classe de collecte simultanée à faible serrure utilisera probablement une combinaison de spinwait et rendement . Bien que concurrentdictionner est une exception notable. La liste des classes que j'ai trouvées incluent les suivantes.

  • ManualResetventsLIM
  • SEMAPHORESLIM
  • Spinlock
  • BARRIER
  • ReaderWriterLockSlim
  • Concurrentqueue
  • ConcurrentStack
  • BlockingCollection

0 commentaires

2
votes

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 ());

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


0 commentaires