Genauer gesagt, in meinem Fall habe ich einen Webserver und eine global zugängliche Struktur, die der Webserver verwendet, um eine Seite zu generieren. Ich habe eine andere Goroutine, die diese Struktur regelmäßig mit neuen Werten aktualisiert. Wird dies Probleme verursachen? Muss ich einen Mechanismus implementieren, um sicherzustellen, dass er nicht gelesen wird, während er aktualisiert wird?Ist es für eine Goroutine sicher, von einer Struktur zu lesen, während eine andere Goroutine es modifiziert?
-3
A
Antwort
1
Nein, das ist die Definition von nicht sicher, und würde von der race detector gefangen werden, wenn Sie es getestet haben. Sie müssen den Zugriff unbedingt synchronisieren, zum Beispiel mit sync.Mutex
or sync.RWMutex
.
Wenn es nicht kritisch ist, immer die neuesten Werte zu haben, können Sie auch jeder Goroutine erlauben, eine Kopie der Struktur zu cachen und dann regelmäßig ihre Kopie von der "Master" -Kopie regelmäßig aktualisieren. Wenn häufig auf die Struktur zugegriffen wird, können dadurch Leistungsprobleme aufgrund von Sperrkonflikten vermieden werden.
Verwandte Themen
- 1. Ist es möglich, eine Goroutine zu verschieben?
- 2. Wert von goroutine erhalten und eine andere goroutine annullieren
- 3. Eine Struktur in einer Goroutine ändern?
- 4. minimale Arbeitsgröße einer Goroutine
- 5. Gibt es eine elegante Möglichkeit, eine andere Goroutine in Golang anzuhalten und fortzusetzen?
- 6. Python IO - Ist es sicher, eine Textdatei in Python zu lesen, während andere Programme darauf schreiben?
- 7. Goroutine Leistung
- 8. Empfangen von Werten von goroutine für eine bestimmte Zeit
- 9. Aufruf von Funktionen in einer "LockOSThread" GoRoutine
- 10. Speichern von Ergebnissen aus einer parallelisierten Goroutine
- 11. Daemon führt nur einmal eine Goroutine aus
- 12. Go Goroutine Sperre und entsperren
- 13. GoLang: Dekomprimieren bz2 in Goroutine, konsumieren in anderen Goroutine
- 14. Datei Globbing über goroutine
- 15. Goroutine Beispiel explaination benötigt
- 16. Goroutine: Zeit.Schlafen oder Zeit.Nach
- 17. Golang ist es sicher cmd.Stdout wechseln
- 18. Erstellen von Slice-Byte-Goroutine hängt
- 19. Wie kann warten, bis mehr als eine Goroutine fertig ist?
- 20. Aufruf einer blockierenden DLL-Funktion von einer Goroutine?
- 21. Korrekte Möglichkeit, Elemente für eine Worker Goroutine einzuordnen?
- 22. Wie Stop Goroutine
- 23. Test Golang Goroutine
- 24. Stoppt alle rekursiven Funktionen in einer Goroutine
- 25. Warum blockiert diese Goroutine?
- 26. Iterieren mit einer Goroutine gibt unerwartetes Ergebnis
- 27. Modern C und C++: Es ist möglich, eine definierte Struktur für andere deklarierte Struktur zu verwenden?
- 28. C-Code und Goroutine-Planung
- 29. Select in goroutine wertet jede andere Anweisung aus
- 30. Ist es sicher, reguläre Ausdrücke aus einer Datei zu lesen?
natürlich nicht, verwenden Sie 'mutex' oder' channel' –
Wie in jeder verwandten Frage angegeben, sind keine Werte in Go sicher für gleichzeitiges Lesen und Schreiben. Sie müssen den Zugriff immer serialisieren. – JimB