【发布时间】:2020-11-29 10:58:34
【问题描述】:
我的问题基本上是在我的程序中,我需要将对 s 结构的引用传递到多个地方,包括一个新线程。例如,在 C 语言中,我可以将它声明为一个全局结构并以这种方式使用它。
如何在 rust 中做到这一点?
对于某些代码,我还需要使用 RefCell 包裹在 Rc 中(我之前的问题)。
fn a_thread(s: &SomeStruct) {
//... code using s reference ... //
}
struct SomeStruct {
val: bool,
}
fn main() {
let mut s = SomeStruct { val: true };
let s_rc = Rc::new(RefCell::new(s));
thread::spawn(move || a_thread(&s)); // <= error: use of moved value 's'
//... code using the s_rc ... //
}
【问题讨论】:
-
a_thread()需要修改s吗?共享参考真的可以吗? -
此外,显示的代码也不适用于单线程代码(
Rc和RefCell),因为您试图将s移动到闭包中,而不是 @987654330 @. -
a_thread()只需要从结构中读取值。我想从主线程修改结构
标签: struct rust reference refcell