在rust多线程中,想使用全局变量,上一篇我们讲了原子的使用,本文,我们来讲讲 lazy_static和Mutex联合使用。我主要是利用这两个来保存已连接的设备的IP信息的。
一、添加
lazy_static = "1.4.0"
二、在main之外或之前定义及初始化
use std::sync::Mutex;
use lazy_static::lazy_static;
lazy_static! {
static ref MYUSERSIP: Mutex<Vec<String>> = Mutex::new(Vec::new());
}
注意哦,全局变量名称是MYUSERSIP,,并且,数据类型为Mutex<Vec<String>>,初始化的时候给了一个空的内容Vec::new()
三、在多线程中的具体使用
println!("当前已连接的设备清单:{:?}",MYUSERSIP.lock().unwrap());//查看变量的长度。
//比如,上述代码输出 ["127.0.0.1:57788", "127.0.0.1:57792"]
let ip="127.0.0.1:57788";
MYUSERSIP.lock().unwrap().push(String::from(&ip));//追加新内容或新元素
MYUSERSIP.lock().unwrap().retain(|item| if *item == ip {false } else { true });//删除满足条件的原有元素
最后再来一个遍历吧。
for i in MYUSERSIP.lock().unwrap().iter() {
println!("当前是设备名称是:{}", i);
}
值得注意的是,全局变量MYUSERSIP在使用之时候,一定要MYUSERSIP.lock().unwrap() 否则就出异常。