可变的静态变量

读取不可变的静态变量是安全的操作:

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。