【发布时间】:2022-01-16 20:35:04
【问题描述】:
use std::ops::Deref;
use std::sync::{Arc, Mutex, MutexGuard};
struct Var {}
fn multithreading() -> Var {
let shared_var = Arc::new(Mutex::new(Var {}));
/*
multithreading job
*/
return *(shared_var.lock().unwrap().deref());
}
我正在定义一个多线程函数来对Var 进行操作,但该函数无法编译和投诉:
error[E0507]: cannot move out of a shared reference
有什么办法可以停止shared_var的共享并返回其中的变量?
为Var 实现特征Copy 也可以解决错误,但在我的实际用例中Var 太大而无法复制,我更喜欢任何其他解决方案。
【问题讨论】:
-
请记住,在机器代码级别,移动本质上是是复制。如果您避免制作“复制”类型的动机是它的大小,那么您可能需要重新考虑您的整体设计。
标签: multithreading rust