¿Cómo crear un singleton global y mutable en Rust?
¡Hola! Estoy aprendiendo Rust y tratando de hacer una variable global accesible desde cualquier parte del programa que pueda ser modificada. Por ejemplo, necesito almacenar la configuración de la aplicación, que se carga una vez al inicio y luego puede actualizarse.
En C++ o Python simplemente haría una variable global, pero en Rust el compilador se queja. Esto es lo que he probado:
```rust
static CONFIG: Vec = Vec::new(); // error: falta el tiempo de vida
```
Luego probé `static mut`:
```rust
static mut COUNTER: i32 = 0;
fn increment() {
unsafe {
COUNTER += 1;
}
}
```
Esto funciona, pero me dijeron que `static mut` no es seguro y puede provocar condiciones de carrera. He oído hablar de `Mutex`, `OnceCell` y `lazy_static`, pero no entiendo cómo combinarlos correctamente.
Necesito:
- Inicializar la variable global una vez al inicio del programa
- Leerla desde múltiples hilos
- Modificarla ocasionalmente (pero no simultáneamente desde diferentes hilos)
¿Cómo se hace correctamente?