Rust多线程使用同一个数据的记录
use std::{sync::{Arc, Mutex}, thread, time::Duration};
struct App {
id: u16,
msg: String
}
fn main() {
let some_app = Arc::new(Mutex::new(App{id:0,msg:String::from("")}));
let new_app = Arc::clone ( & some_app);
thread::spawn(move|| {
let mut time:u16 = 1;
loop {
let mut clone_one = new_app.lock().unwrap();
thread::sleep(Duration::from_secs(2));
let one = &mut *clone_one;
one.id = time;
one.msg = String::from("WC");
drop(clone_one);
println!("thread run");
time += 1;
thread::sleep(Duration::from_secs(2));
}
});
loop {
thread::sleep(Duration::from_secs(1));
let mut clone_one = some_app.lock().unwrap();
let one = &mut *clone_one;
println!("id={}",one.id);
println!("msg={}",one.msg);
}
}