Atómicos y sync.Once en Go
Contadores sin candados, e inicialización de una sola vez.
var (
hits atomic.Int64
setupOnce sync.Once
)
func record() int64 {
setupOnce.Do(func() {
hits.Store(0)
})
return hits.Add(1)
}
func snapshot() int64 {
return hits.Load()
}
Cómo funciona
atomic.Int64se actualiza con seguridad sin mutex.AddyLoadson operaciones atómicas únicas.sync.Oncecorre su preparación exactamente una vez entre goroutines.
Palabras clave y builtins usados aquí
funcint64returnvar
El intento, en números
- Líneas
- 15
- Caracteres a escribir
- 179
- Tokens
- 54
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 31 segundos.
Paso 4 de 5 en Sincronización; paso 17 de 25 en Concurrencia.