2017-08-15 1 views
-3

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

natürlich nicht, verwenden Sie 'mutex' oder' channel' –

+1

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

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