use std::thread;
// 定义一个可以被多线程安全共享的结构体
#[derive(Debug)]
struct SharedData {
value: i32,
}
// 打印结构体内容的函数,它接受一个Arc<Mutex<SharedData>>类型的参数
fn print_data(data: Arc<Mutex<SharedData>>) {
// 获取互斥锁的锁定状态,这里使用unwrap处理可能的Err
// 在实际应用中,应该更优雅地处理这种错误
let locked_data = data.lock().unwrap(); // 获取锁
// 打印结构体的内容
println!("{:?}", locked_data); // 打印数据
}
fn main() {
// 创建一个Arc包装的Mutex,用于在多个线程之间共享数据
let shared_data = Arc::new(Mutex::new(SharedData { value: 42 }));
// 创建多个线程,并将Arc的克隆传递给每个线程
let handle1 = thread::spawn(move || {
// 在这里,我们创建了一个新的Arc克隆
let data_clone = Arc::clone(&shared_data);
print_data(data_clone);
});
let handle2 = thread::spawn(move || {
// 在这里,我们又创建了一个新的Arc克隆
let data_clone = Arc::clone(&shared_data);
print_data(data_clone);
});
// 等待线程完成
handle1.join().unwrap();
handle2.join().unwrap();
}
这段代码有错误,我该如何修复他?
use of moved value: `shared_data` [E0382] value used here after move
1
共 3 条评论, 1 页
评论区
写评论非常感谢你
传给move的闭包之前,就先调用Arc::clone(),具体的看例子:
https://doc.rust-lang.org/std/sync/struct.Arc.html#examples