La synchronisation est cruciale lorsque plusieurs threads (go-routines dans Go) doivent accéder et modifier la mémoire partagée. Un mécanisme de synchronisation évite les conditions de concurrence et les incohérences des données. Dans Go, les packages sync et atomic proposent diverses primitives de verrouillage à cet effet.
RWMutex (mutex en lecture-écriture) est une primitive de synchronisation qui contrôle l'accès aux fichiers partagés. données. Contrairement au Mutex standard, RWMutex permet à plusieurs threads de lire les mêmes données simultanément tout en limitant l'accès en écriture à un thread à la fois.
s.countersLock.RLock(), lorsqu'il est appelé, verrouille le champ des compteurs dans le récepteur s. Cela signifie que d'autres threads peuvent également acquérir des verrous de lecture sur les compteurs simultanément sans blocage.
s.countersLock.RLock() verrouille uniquement le champ des compteurs, laissant le champ de moyennes débloqué. Cela permet à d'autres threads d'accéder et de modifier le champ des moyennes sans interférence.
RWMutex est un mécanisme de synchronisation couramment utilisé dans Go. Bien que les canaux aient leurs atouts en matière de gestion de la concurrence, RWMutex convient à la protection de la mémoire partagée lorsque plusieurs threads doivent lire et écrire occasionnellement simultanément sur les mêmes données.
atomic.AddInt64 est une opération atomique qui ajoute une valeur à un entier de manière atomique, garantissant que l'opération se produit comme une seule unité. Cela évite les conditions de concurrence critique et la corruption des données lors de la mise à jour des variables partagées.
Dans cet exemple, le compteur est déverrouillé avant l'opération d'ajout pour permettre à d'autres threads d'accéder et de modifier le compteur simultanément. Si le verrou était maintenu jusqu'après l'ajout, il bloquerait inutilement les autres threads essayant d'incrémenter le compteur.
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!