Maison >développement back-end >C++ >Quelle est l'approche optimale pour incrémenter un compteur entier partagé sur plusieurs threads : « verrouillé », « verrouillé » ou « volatile » ?
Fonctionnement, instruction et Interlocked
Comparaison de champ lock
volatile
Question:
Supposons qu'une classe contient un type de champ de compteur public public, qui est accessible par plusieurs threads et n'augmente que des opérations réduites. Quelle méthode est le meilleur moyen d'augmenter ce champ, pourquoi?
int
lock(this.locker) this.counter ;
Modifier la contre-décoration du compteur à Interlocked.Increment(ref this.counter);
public volatile
Modifier la contre-décoration du compteur en
uniquement en utilisant Les champs ne peuvent garantir la sécurité du thread. Bien que pour s'assurer que plusieurs CPU accèdent aux mêmes données en même temps, il ne peut pas empêcher l'ingénierie des opérations de lecture et d'écriture, ce qui peut entraîner des erreurs.
public volatile
volatile
volatile
L'instruction fournit la sécurité des threads en empêchant d'autres threads d'effectuer le code du champ de protection. Cependant, le verrou est relativement lent et peut inutile pour bloquer d'autres threads.
Meilleur:
lock(this.locker) this.counter ;
lock
Comparaison du fonctionnement et
L'opération de l'opération effectuée dans l'exécution d'une clôture complète est utilisée pour empêcher le tri de plusieurs processeurs.
Les champs sont placés autour de la semi-forfence uniquement autour de leurs opérations, ils ne l'empêcheront pas de réduction. Par conséquent, pour la modification simultanée des données partagées, l'opérationInterlocked.Increment(ref this.counter);
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!