MST

星途 面试题库

面试题:Rust中借用规则如何保障数据安全

请阐述Rust语言中借用的三条核心规则,并举例说明这些规则是怎样防止数据竞争,从而保障安全性的。
32.9万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

Rust语言借用的三条核心规则

  1. 同一作用域内,不可同时存在可变借用和不可变借用:一个数据资源在同一时间要么有一个可变借用,要么有多个不可变借用,但不能同时存在可变和不可变借用。
  2. 借用的生命周期必须小于等于被借用数据的生命周期:借用的数据不能比它所借用的源数据存活时间更长,否则会导致悬空指针。
  3. 可变借用必须唯一:在任何给定时间,只能有一个可变借用指向数据,这确保对数据的修改是唯一的。

举例说明防止数据竞争保障安全性

fn main() {
    let mut num = 5;
    // 尝试同时创建可变和不可变借用,会编译错误
    // let r1 = #
    // let r2 = &mut num;

    // 符合规则的不可变借用
    let r1 = #
    let r2 = #
    println!("r1: {}, r2: {}", r1, r2);

    // 符合规则的可变借用
    let mut r3 = &mut num;
    *r3 = 6;
    println!("r3: {}", r3);

    // 尝试创建第二个可变借用,会编译错误
    // let r4 = &mut num;
}

在上述代码中,若尝试同时创建可变和不可变借用,或创建多个可变借用,编译器会报错,从而防止数据竞争。借用的生命周期规则也确保了在源数据被释放后,不会有悬空指针访问该数据,进而保障了安全性。