MST

星途 面试题库

面试题:Rust中借用规则如何防止简单的数据竞争

请描述Rust借用规则的核心要点,并通过一个简单的代码示例(例如,一个函数接收并操作借用的数据),说明这些规则是怎样防止数据竞争的。
13.1万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

Rust借用规则核心要点

  1. 同一作用域内,可变借用只能有一个:这确保在任何时刻,只有一个地方可以对数据进行修改,避免多个修改操作同时进行导致数据竞争。
  2. 不可变借用可以有多个,但不能与可变借用同时存在:多个不可变借用可以同时存在,因为它们都只是读取数据,不会修改数据,所以不会引发数据竞争。但如果存在可变借用,就不允许有不可变借用,以防止在修改数据时,其他地方读取到不一致的数据。
  3. 借用的生命周期必须在被借用数据的生命周期之内:这保证了借用的数据在其有效生命周期内被使用,不会出现悬空指针(dangling pointer)的情况。

代码示例

fn main() {
    let mut data = String::from("hello");
    // 尝试创建可变借用
    let mut borrow1 = &mut data;
    // 下面这行代码会报错,因为在可变借用borrow1存在时,不能再创建不可变借用
    // let borrow2 = &data; 

    borrow1.push_str(", world");
    println!("{}", borrow1);

    // 这里borrow1的作用域结束,data上的可变借用被释放
}

在这个示例中,首先创建了一个可变借用borrow1,此时不能再创建对data的不可变借用。borrow1可以安全地修改data,当borrow1离开其作用域后,data上的可变借用被释放,此时又可以对data进行新的借用操作。这样通过借用规则有效地防止了数据竞争。