vorzustellen. Ich hoffe, dass es den Freunden, die es brauchen, hilfreich sein wird! Freundliche Erinnerung: Das Lesen dieses Artikels dauert etwa 5 Minuten und 45 Sekunden. Bitte geben Sie mir weitere Hinweise zu etwaigen Mängeln. Beim Entwurf unserer häufigeren Großprojekte treten häufig Parallelitätsprobleme auf, um die Genauigkeit der Daten zu verbessern und sicherzustellen, dass die Daten im selben kritischen Abschnitt nur von einem Thread bearbeitet werden können Szenarien, die im täglichen Leben verwendet werden. Von:
Zähler
: Das Zählerergebnis ist ungenau;Wenn im Prozess der gleichzeitigen Programmierung gleichzeitig auf einige Ressourcen oder Variablen im Programm zugegriffen oder diese geändert werden, muss dieser Teil des Programms zuerst geschützt und dann betrieben werden, um Datenungenauigkeiten durch gleichzeitigen Zugriff zu vermeiden. und der Schutz nach Abschluss des Vorgangs entfernt wird, wird dieser Teil des geschützten Programms als „kritischer Abschnitt“ bezeichnet.
Diagramm des kritischen Abschnitts von Go-Mutex Mutex ist das am weitesten verbreitete Synchronisationsprimitiv in der Go-Sprache, auch Parallelitätsprimitiv genannt.
Es löst das Problem des gleichzeitigen Lesens und Schreibens gemeinsam genutzter Ressourcen, um Datenwettlaufprobleme zu vermeiden .
Grundlegende Verwendung
Mutex bietet zwei Methoden: Sperren und Entsperren: Verwenden Sie beim Betreten des kritischen Abschnitts die Lock-Methode zum Sperren und beim Verlassen des kritischen Abschnitts die Unlock-Methode, um die Sperre aufzuheben.
1 2 3 |
|
Wenn eine Goroutine die Lock-Methode aufruft, um die Sperre zu erhalten, blockieren andere Goroutinen den Lock-Aufruf, bis die Goroutine, die gerade die Sperre erwirbt, die Sperre aufhebt.
Das Folgende ist ein Beispiel für einen Zähler, der von 100 Goroutinen ausgeführt wird, um den Zähler zu akkumulieren, und das endgültige Ausgabeergebnis ist:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
Oft wird Mutex nicht allein verwendet, sondern verschachtelt in einer Struktur Wird als Teil der Struktur verwendet. Wenn die eingebettete Struktur mehrere Felder hat, platzieren wir normalerweise den Mutex auf dem zu steuernden Feld und verwenden dann Leerzeichen, um die Felder zu trennen.
Sie können sogar die Logik des Erwerbs von Sperren, der Freigabe von Sperren und des Zählens um eins in einer Methode kapseln.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
|
A: FIFO-Strategie: Bei der Goroutine-Planung wird eine Warteschlange verwaltet, um die Ausführung der Goroutine sicherzustellen. Wenn die Goroutine, die die Sperre erhält, den Vorgang des kritischen Abschnitts abschließt, wird die Sperre freigegeben. In der Warteschlange Die in der Warteschlange an erster Stelle stehende Goroutine erhält die Sperre und führt kritische Abschnittsoperationen aus.
Das obige ist der detaillierte Inhalt vonÜber Mutex in der gleichzeitigen Go-Programmierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!