Wirkt WaitGroup.Wait() in Go als Speicherbarriere?

Barbara Streisand
Freigeben: 2024-10-26 11:32:02
Original
131 Leute haben es durchsucht

 Does WaitGroup.Wait() Act as a Memory Barrier in Go?

Garantiert WaitGroup.Wait() eine Speicherbarriere?

Bedenken Sie den folgenden Codeausschnitt:

var condition bool
var wg sync.WaitGroup
for _, item := range items {
    wg.Add(1)
    go func(item) {
        if meetsCondition(item) {
            condition = true
        }
        wg.Done()
    }(item)
}
wg.Wait()
// is it safe to check condition here?
Nach dem Login kopieren

The Es stellt sich die Frage, ob es sicher ist, die Bedingungsvariable nach der Rückkehr von wg.Wait() zu überprüfen. In der offiziellen Go-Dokumentation werden keine Auswirkungen auf Speicherbarrieren ausdrücklich erwähnt, aber in der WaitGroup-Dokumentation heißt es, dass Wait blockiert, bis der Wartegruppenzähler Null erreicht.

Lösung

Ja, Es ist sicher, die Bedingungsvariable nach der Rückkehr von wg.Wait() zu überprüfen. Es gibt eine implizite „events-before“-Beziehung zwischen wg.Wait() und wg.Done(). Wenn eine Goroutine wg.Done() aufruft, stellt sie sicher, dass alle abgeschlossenen Vorgänge für andere Goroutinen sichtbar werden, die wg.Wait() bereits aufgerufen haben. Daher fungiert wg.Wait() effektiv als Speicherbarriere und stellt sicher, dass die Bedingungsvariable vor der Prüfung nach der Rückkehr von wg.Wait() aktualisiert wird.

Diese Vorher-Beziehung ist nicht explizit dokumentiert, wurde aber bereits dokumentiert von Go-Entwicklern bestätigt. Weitere Informationen finden Sie im Go-Forenthread hier.

Das obige ist der detaillierte Inhalt vonWirkt WaitGroup.Wait() in Go als Speicherbarriere?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!