可变的静态变量
读取不可变的静态变量是安全的操作:
static HELLO_WORLD: &str = "Hello, world!"; fn main() { println!("HELLO_WORLD: {HELLO_WORLD}"); }
但是,读取和写入可变的静态变量是不安全的,因为这可能会 造成数据争用:
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! }
通常,我们不建议使用可变的静态变量,但在某些情况下,在低层级 no_std
代码中可能需要这样做, 例如实现堆分配器或使用某些 C API。