在Rust中,全局变量默认是不可变的。但是,你可以通过使用lazy_static
宏和RwLock
来实现类似的功能。
lazy_static
宏允许你在程序运行时初始化一个全局变量,而RwLock
是一个读写锁,允许多个读取者同时访问变量,但只允许一个写入者。
下面是一个示例:
use std::sync::{RwLock, RwLockReadGuard, RwLockWriteGuard}; use std::thread; lazy_static! { static ref GLOBAL_DATA: RwLock= RwLock::new(String::from("Initial value")); } fn main() { let handle = thread::spawn(|| { let mut data = https://www.yisu.com/ask/GLOBAL_DATA.write().unwrap();"Hello, world!"); }); handle.join().unwrap(); let read_guard: RwLockReadGuard = GLOBAL_DATA.read().unwrap(); println!("Global data: {}", *read_guard); }
在这个示例中,我们使用lazy_static
宏创建了一个全局的RwLock
变量GLOBAL_DATA
。然后,我们在一个线程中获取写锁并修改全局变量的值。最后,我们在主线程中获取读锁并打印全局变量的值。
请注意,这种方法并不是真正的全局变量,因为它使用了RwLock
来保护数据。然而,它可以实现类似的功能,允许多个读取者同时访问数据,但只允许一个写入者。