就像题目中所说,为什么Rust会防止多个可变引用?我已经读过rust-book的章节了,我理解当我们有多线程代码时,可以确保不会发生数据竞争,但是让我们看一下这段代码:
fn main() {
let mut x1 = String::from("hello");
let r1 = &mut x1;
let r2 = &mut x1;
r1.insert(0, 'w');
}
这段代码没有并发运行,因此不存在数据竞争的可能性。此外,当我创建新线程并且想在新线程中使用来自父线程的变量时,我必须将其移动,以便只有新线程才是父变量的所有者。
我唯一能想到的原因是,当代码越来越复杂时,程序员可能会迷失在自己的代码中。我们有多个地方可以修改同一数据,即使代码不并行运行,也可能出现一些错误。
x1
的优点是什么?您想在哪里使用r2
,而不能仅使用r1
? - Bergi