capypad
0 Tage Serie
go / expert
Snippet

Lock-freies Konfigurations-Update mit atomic.Value

atomic.Value bietet eine effiziente Möglichkeit, Werte beliebiger Typen atomar zu laden und zu speichern. Dies ist besonders nützlich für Konfigurationsobjekte, die von vielen Goroutinen häufig gelesen, aber selten aktualisiert werden. Es vermeidet den Overhead eines RWMutex bei jeder Leseoperation und verlässt sich stattdessen auf hardwarenahe atomare CPU-Instruktionen.

snippet.go
go
1
2
3
4
5
6
7
8
9
10
type Config struct { Enabled bool; Timeout time.Duration }
var globalConfig atomic.Value
 
func updateConfig(c *Config) {
globalConfig.Store(c)
}
 
func getConfig() *Config {
return globalConfig.Load().(*Config)
}
Erklärung
1
globalConfig.Store(c)
Ersetzt die aktuelle Konfiguration atomar durch einen neuen Pointer.
2
globalConfig.Load().(*Config)
Ruft den Pointer atomar ab und führt eine Typzusicherung durch.