Avatar ·

如何在 Rust 中创建全局可变的 singleton?

你好!我正在学习 Rust,并尝试创建一个全局变量,可以从程序的任何部分访问并且可以修改。例如,我需要存储应用程序的配置,该配置在启动时加载一次,之后可以更新。 在 C++ 或 Python 中,我只需创建一个全局变量,但在 Rust 中编译器会报错。以下是我尝试过的: ```rust static CONFIG: Vec = Vec::new(); // 错误:缺少生命周期 ``` 然后我尝试了 `static mut`: ```rust static mut COUNTER: i32 = 0; fn increment() { unsafe { COUNTER += 1; } } ``` 这可以工作,但有人告诉我 `static mut` 是不安全的,可能导致数据竞争。我听说过 `Mutex`、`OnceCell` 和 `lazy_static`,但不知道如何正确组合它们。 我需要: - 在程序启动时一次性初始化全局变量 - 从多个线程读取它 - 偶尔修改它(但不能同时从不同线程修改) 如何正确实现?