MS LIEN :La connexion hyperlientérée est visible.
Le mot-clé volatile indique qu’un champ peut être modifié par plusieurs threads exécutant simultanément. Les champs déclarés volatils ne sont pas limités par l’optimisation du compilateur (à condition qu’ils soient accessibles par un seul thread). Cela garantit que le champ est rendu avec la valeur la plus récente à tout moment.
Le modificateur volatile est généralement utilisé pour les champs accessibles par plusieurs threads mais qui ne sérialisent pas l’accès à l’aide d’une instruction de verrouillage.
Les mots-clés volatils peuvent être appliqués aux types de champs suivants :
- Type de citation.
- Type de pointeur (dans un contexte dangereux). Notez que bien que le pointeur lui-même puisse être mutable, l’objet vers lequel il pointe ne peut pas l’être. En d’autres termes, « pointeur vers un objet mutable » ne peut pas être déclaré.
- Des types tels que sbyte, byte, short, ushort, int, uint, char, float et bool.
- Un type d’enum avec l’un des types de base suivants : octet, sbyte, court, ushort, int ou uint.
- Paramètres de type génériques connus pour être des types de référence.
- IntPtr et UIntPtr.
Les mots-clés variables ne peuvent être appliqués qu’aux champs d’une classe ou d’une structure.Les variables locales ne peuvent pas être déclarées volatiles。
Plus de bêtises, écrivez une boucle pour tester :
Testons ça 10 000 fois d’affilée,a constaté que la sortie de valeurs est correcte, mais,Ça n’explique pasVolatile est sûr pour le filetageParce que, si vous le testez plusieurs fois, vous constaterez qu’il y aura des erreurs de calcul ! Parce qu’il y a une chance d’un résultat correct et une chance d’un résultat erroné
Code:
Testons à nouveau 100 000 boucles, et nous pouvons constater que la valeur de a est incorrecte, car plus le nombre de boucles est petit, plus la probabilité d’erreur est faible, et l’erreur n’est pas si évidente, tout comme il n’y a pas eu d’erreur après 10 000 boucles tout à l’heure.
À ce moment-là, nous ajoutons un verrou pour tester, et on peut voir que la valeur de a est calculée correctement comme prévu.
Code:
Résumé : volatile ne garantit pas la sécurité du fil, comme vous pouvez le voir dans l’exemple ci-dessus.
|