Variáveis Estáticas Mutáveis
É seguro ler uma variável estática imutável:
static HELLO_WORLD: &str = "Olá, mundo!";
fn main() {
println!("HELLO_WORLD: {HELLO_WORLD}");
}
No entanto, como podem ocorrer corridas de dados (data races), não é seguro ler e gravar dados em variáveis estáticas mutáveis:
static mut COUNTER: u32 = 0;
fn add_to_counter(inc: u32) {
// SEGURANÇA: Não há outras _threads_ que poderiam estar acessando `COUNTER`.
unsafe {
COUNTER += inc;
}
}
fn main() {
add_to_counter(42);
// SEGURANÇA: Não há outras _threads_ que poderiam estar acessando `COUNTER`.
unsafe {
println!("COUNTER: {COUNTER}");
}
}
-
O programa aqui é seguro porque é single-threaded. No entanto, o compilador Rust é conservador e assumirá o pior. Tente remover o
unsafee veja como o compilador explica que é um comportamento indefinido alterar uma variável estática de várias threads. -
Usar uma variável estática mutável geralmente é uma má ideia, mas há alguns casos em que isso pode fazer sentido, tais como em código
no_stdde baixo nível, como implementar um alocador de heap ou trabalhar com algumas APIs C.