0%

2024开源操作系统训练营第一阶段总结-CreatorHell

CreatorHell LearningOS 第一阶段总结

智能指针

  • Box:这是一种在堆上分配内存并管理所有权的智能指针。它允许你在堆上创建数据,并且当你不再需要这些数据时,Box会自动释放它们所占用的内存。
  • Rc:这是一种用于引用计数类型的智能指针,它允许多个所有者同时拥有同一个数据。当最后一个所有者离开作用域时,Rc会自动减少引用计数,并在计数达到零时释放内存。
  • Arc:与Rc类似,Arc也是引用计数类型,但它是线程安全的,可以在多线程环境中使用。
  • Cow<’a, T>:这是一种写时克隆(Clone-on-Write)的智能指针,类似于虚拟内存管理的写时复制。它包含一个只读借用,如果调用方需要所有权做修改操作,它会克隆借用的数据。

    所有权

  • 所有权概念:在Rust中,每个值都有一个被称为其所有者(owner)的变量,且每个值有且只有一个所有者。这意味着当一个变量被创建时,它就被分配给了一个特定的所有者。
  • 作用域关联:值的生命周期与其所有者的作用域相关联。当所有者变量离开其作用域时,值将被清理,从而防止内存泄漏。
  • 移动语义:当值从一个作用域移动到另一个作用域时,原作用域将失去对该值的所有权。这个过程称为移动(move),它是Rust内存管理的关键部分,有助于减少不必要的数据复制。
  • 借用机制:虽然Rust的所有权原则保证了内存安全,但它也引入了借用机制来允许多个引用同时访问数据。借用分为可变借用和不可变借用,它们通过借用检查器来确保数据的并发安全。
  • 克隆与复制:对于实现了Clone trait的类型,可以通过调用clone方法来创建数据的副本。而对于实现了Copy trait的类型,数据会在赋值或作为参数传递时自动复制,这适用于那些可以安全地复制数据的情况。

    多线程

  • 线程创建:在 Rust 中,可以使用标准库中的 std::thread 模块来创建新的线程。通过 spawn 函数可以启动一个线程,该函数接受一个闭包(匿名函数),这个闭包将在新线程中运行。
  • 线程控制:创建的线程可以通过 join 方法等待其执行完毕。如果主线程结束而子线程还在运行,Rust 会触发 panic 以防止资源泄露。因此,通常需要调用 join 或 detach 来避免这种情况。
  • 线程安全:Rust 的所有权和借用机制有助于保证多线程环境下的内存安全。当需要在多个线程间共享数据时,可以使用 Arc, Mutex, RwLock 等智能指针来确保同一时间只有一个线程能够访问或修改数据。
  • 消息传递:对于需要线程间通信的场景,Rust 提供了消息传递机制,如 mpmc(Multiple Producer, Multiple Consumer)队列,允许多个生产者和消费者线程安全地交换信息。