在Rust中,全局變量默認是不可變的。但是,你可以通過使用lazy_static
宏和RwLock
來實現類似的功能。
lazy_static
宏允許你在程序運行時初始化一個全局變量,而RwLock
是一個讀寫鎖,允許多個讀取者同時訪問變量,但只允許一個寫入者。
下面是一個示例:
use std::sync::{RwLock, RwLockReadGuard, RwLockWriteGuard};
use std::thread;
lazy_static! {
static ref GLOBAL_DATA: RwLock<String> = RwLock::new(String::from("Initial value"));
}
fn main() {
let handle = thread::spawn(|| {
let mut data = GLOBAL_DATA.write().unwrap();
*data = String::from("Hello, world!");
});
handle.join().unwrap();
let read_guard: RwLockReadGuard<String> = GLOBAL_DATA.read().unwrap();
println!("Global data: {}", *read_guard);
}
在這個示例中,我們使用lazy_static
宏創建了一個全局的RwLock<String>
變量GLOBAL_DATA
。然后,我們在一個線程中獲取寫鎖并修改全局變量的值。最后,我們在主線程中獲取讀鎖并打印全局變量的值。
請注意,這種方法并不是真正的全局變量,因為它使用了RwLock
來保護數據。然而,它可以實現類似的功能,允許多個讀取者同時訪問數據,但只允許一個寫入者。