2022-12-21 16:36:30 +01:00
|
|
|
# Mutable Static Variables
|
|
|
|
|
|
|
|
It is safe to read an immutable static variable:
|
|
|
|
|
|
|
|
```rust,editable
|
|
|
|
static HELLO_WORLD: &str = "Hello, world!";
|
|
|
|
|
|
|
|
fn main() {
|
2023-01-17 14:25:33 +00:00
|
|
|
println!("HELLO_WORLD: {}", HELLO_WORLD);
|
2022-12-21 16:36:30 +01:00
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
However, since data races can occur, it is unsafe to read and write mutable
|
|
|
|
static variables:
|
|
|
|
|
|
|
|
```rust,editable
|
|
|
|
static mut COUNTER: u32 = 0;
|
|
|
|
|
|
|
|
fn add_to_counter(inc: u32) {
|
|
|
|
unsafe { COUNTER += inc; } // Potential data race!
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
add_to_counter(42);
|
|
|
|
|
|
|
|
unsafe { println!("COUNTER: {}", COUNTER); } // Potential data race!
|
|
|
|
}
|
|
|
|
```
|