Rust 内部可变性

深入理解 Rust 的内部可变性模式

Cell

单线程内部可变性容器,用于在不可变引用中修改值。

let cell = Cell::new(42);
基础 内部可变性

RefCell

单线程内部可变性容器,提供运行时借用检查。

let cell = RefCell::new(value);
let mut borrowed = cell.borrow_mut();
基础 内部可变性

OnceCell

单线程懒初始化容器,只能设置一次值。

let cell = OnceCell::new();
cell.set(value).unwrap();
中级 内部可变性

LazyCell

延迟初始化的单线程Cell,提供按需计算的值。

let lazy = LazyCell::new();
lazy.fill(|| expensive_computation());
中级 内部可变性

Atomic Take

线程安全的一次性提取容器,允许在多线程环境中安全地移出值。

let take = AtomicTake::new(value);
let value = take.take().unwrap();
高级 内部可变性

Critical-Section

提供临界区抽象的内部可变性原语,用于嵌入式系统中的安全共享访问。

static SHARED: CriticalSection> = 
    CriticalSection::new(Cell::new(0));

critical_section::with(|cs| {
    let cell = SHARED.borrow(cs);
    cell.set(cell.get() + 1);
});
高级 内部可变性