在Rust中,全局變量可以通過使用lazy_static
宏和RwLock
來聲明。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 mut handles = vec![];
for i in 0..10 {
let handle = thread::spawn(move || {
let mut data = GLOBAL_DATA.write().unwrap();
*data += format!(" {}", i);
});
handles.push(handle);
}
for handle in handles {
handle.join().unwrap();
}
let data = GLOBAL_DATA.read().unwrap();
println!("Global data: {}", *data);
}
在這個示例中,我們使用lazy_static
宏定義了一個名為GLOBAL_DATA
的全局變量,它是一個RwLock<String>
類型的。我們在main
函數中創建了10個線程,每個線程都會獲取GLOBAL_DATA
的寫鎖,并向其添加一個字符串。最后,我們讀取GLOBAL_DATA
的值并打印出來。