【发布时间】:2020-02-10 08:55:24
【问题描述】:
就像在主题中一样,为什么 Rust 会阻止多个可变引用?我已经阅读了 rust-book 中的章节,并且我知道当我们拥有多线程代码时,我们可以避免数据竞争,但让我们看看这段代码:
fn main() {
let mut x1 = String::from("hello");
let r1 = &mut x1;
let r2 = &mut x1;
r1.insert(0, 'w');
}
此代码不是同时运行的,因此不可能发生数据争用。 更重要的是,当我创建新线程并且我想在新线程中使用来自父线程的变量时,我必须移动它,因此只有新线程是父变量的所有者。
我能看到的唯一原因是程序员在成长过程中可能会迷失在自己的代码中。我们有多个地方可以修改一条数据,即使代码没有并行运行,我们也会遇到一些错误。
【问题讨论】:
-
每个帖子只能问一个问题。我建议您编辑您的帖子以删除第二个问题并在自己的帖子中提出。
-
好的,我做到了。这是链接:stackoverflow.com/q/58367174/9620900如果你想回答。
-
在代码中对
x1进行多个可变引用有什么好处?您想在哪里使用r2而不能只使用r1? -
整个 Java 按照我上面描述的方式工作。您可以在同一范围内拥有数百万个包含对同一数据段的引用的对象,还是我错了?
标签: multithreading rust borrow-checker borrowing