De la MSDN n'est pas vraiment clair son but.
Peut-il être utilisé pour simuler un test de calcul intensif du processeur?
De la MSDN n'est pas vraiment clair son but.
Peut-il être utilisé pour simuler un test de calcul intensif du processeur?
pas de. Il est utilisé comme un remplacement pour le très court terme des appels de veille.
Lorsque vous faites du multi-thread de verrouillage, si la ressource que vous tentez d'acquérir est déjà verrouillé, vous allez dormir et attendre qu'il se libère. Lorsque vous faites cela, vous abandonnez le reste du temps qui vous ont été attribués par le programmateur pour utiliser le processeur pour quelqu'un d'autre peut avoir un aller. Normalement, c'est très bien, surtout pour les longues périodes d'attente, dans l'attente de IO, les charges des autres processus peuvent s'exécuter sur le PROCESSEUR pendant que vous êtes en attente pour le disque de piles pour le faire tourner.
Cependant, parfois, vous êtes en attente pour une petite quantité de temps. Dans ces cas, il suffit généralement de donner de votre temps restant de toute façon et attendre que tous les autres threads pour faire leur chose avant d'obtenir un autre aller.. alors vous pouvez tricher, au lieu d'attendre, vous vous asseyez là en permanence d'interrogation dans un " sommes-nous presque tout va bien?". Si le verrou n'est tenu que pour une fraction de votre temps restant, cela devient un moyen très efficace d'attente, il est aussi très efficace comme le planificateur n'a pas à s'impliquer dans la réorganisation de tous les autres threads à utiliser le temps de vous donner si vous avez attendu normalement.
Évidemment, si vous faites tourner chaque fois que vous voulez une serrure, vous n'allez pas être très populaire, votre application va devenir lent et utilise 100% du CPU, mais en très petites doses, au bon moment, il rend l'application plus réactive.
Si vous êtes en train de penser " quand dois-je utiliser?", c'est une délicate appel à faire - si vous disposez d'une ressource qui est très souvent verrouillé et déverrouillé très rapidement, puis un spinlock autour de ce que, au lieu d'attendre, c'est une bonne idée (et puis de tester votre application pour la performance), si vous essayez de tourner pour un court laps de temps, puis revenir à la normale, attends, c'est un moyen raisonnable. Mais en général, vous n'aurez plus jamais besoin de l'utiliser.
Le but est de faire un "pas cher" attends, si vous croyez que la condition que vous êtes en attente, cela va arriver très, très vite. Normalement, si vous êtes en attente de quelque chose, vous laisser le fil d'aller dormir et le processeur/système d'exploitation de changement de contexte à un autre thread. Les changements de contexte ne sont pas particulièrement bon marché, donc si vous avez des connaissances avancées de la situation et de croire que c'est moins cher qu'à attendre que de changement de contexte, vous spin attendre.
Mon conseil: si vous avez besoin de demander, vous n'avez pas besoin de l'utiliser. (Je n'ai jamais voulu de moi-même.) En gros, c'est une de ces choses qui est vraiment utile que dans de très rares situations, mais la plupart des gens devraient laisser tout seul.
En guise de remarque, Microsoft s’est débarrassé du mécanisme de verrouillage par rotation à l’origine des threads de Windows 7, car il n’était pas adapté aux processeurs multicœurs. Regardez ça :
Pour autant que je suis concerné (et j'en suis heureux pour les corrections!), la seule utilisation du spin attend est lors de la mise en œuvre d'un verrouillage ou inter-thread-mécanisme de rappel. Et aucun des deux ne doit être fait manuellement (en général), puisqu'ils existent déjà.
Lorsque vous avez verrouillé une ressource et un autre thread demandes d'accès synchronisé pour cela, il doit attendre que le premier thread fini de l'utiliser. Cette attente peut être fait simplement en tournant dans une boucle (ou autrement de couchage + un changement de contexte, comme mentionné par Jon).
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.