Rust全局变量

发布时间 2023-12-20 17:59:41作者: 咕咚!

Rust全局变量

Rust全局变量的一种解决方案,由于mut问题,会导致unsafe代码块。


use std::{collections::HashMap, sync::OnceLock};

/// 全局变量,模拟SESSION管理器
pub static mut SESSION: OnceLock<HashMap<String, String>> = OnceLock::new();

/// 初始化函数
pub fn init() {
    unsafe {
        SESSION.get_or_init(|| HashMap::new());
    }
}

/// 插入kv
pub fn insert(k: String, v: String) {
    unsafe {
        SESSION.get_mut().unwrap().insert(k, v);
    }
}

/// 查找
pub fn get(k: String) -> String {
    let v = unsafe {
        let v: String = SESSION.get().unwrap().get(&k).unwrap().clone();
        v
    };
    v
}


fn main() {
    init();

    let a = std::thread::spawn(|| {
        insert("a".to_string(), "b".to_string());
    });
    
    let b = std::thread::spawn(|| {
        insert("b".to_string(), "c".to_string());
    });

    let c = std::thread::spawn(|| {
        let v = get(&"a".to_string());
        println!("{:?}", v);
    });
    
    a.join().unwrap();
    b.join().unwrap();
    c.join().unwrap();
}