Como criar um singleton global e mutável em Rust?
Olá! Estou estudando Rust e tentando criar uma variável global acessível de qualquer parte do programa que possa ser modificada. Por exemplo, preciso armazenar a configuração da aplicação, que é carregada uma vez na inicialização e pode ser atualizada depois.
Em C++ ou Python, eu simplesmente faria uma variável global, mas no Rust o compilador reclama. Aqui está o que tentei:
```rust
static CONFIG: Vec = Vec::new(); // erro: falta tempo de vida
```
Depois tentei `static mut`:
```rust
static mut COUNTER: i32 = 0;
fn increment() {
unsafe {
COUNTER += 1;
}
}
```
Isso funciona, mas me disseram que `static mut` é inseguro e pode causar data races. Ouvi falar sobre `Mutex`, `OnceCell` e `lazy_static`, mas não entendo como combiná-los corretamente.
Preciso de:
- Inicializar a variável global uma vez na inicialização do programa
- Lê-la de várias threads
- Modificá-la ocasionalmente (mas não simultaneamente de diferentes threads)
Como fazer corretamente?
No answers yet.
Faça login para deixar uma resposta