type
status
date
slug
summary
tags
category
icon
password
  1. 内部可变性:通过编译时保证安全,而非运行时锁
  1. 零成本抽象:无锁设计,性能接近直接操作原生数据
  1. 单线程限制:仅适用于单线程环境,跨线程需要使用 Mutex 或者 RwLock 等同步机制

基本用法

1、创建 Cell:
2、常用方法:
方法
作用
示例
get()
获取不可变引用
let value = shared_state.get();
set(value)
替换整个值
shared_state.set(100);
replace(value)
替换值并返回旧值
let old = shared_state.replace(200);
take()
移除并返回值,原位置留空(None)
let val = shared_state.take();
swap(value)
用新值替换旧值并返回旧值
let old = shared_state.swap(300);
as_ptr()
获取指向内部数据的原始指针
let ptr = shared_state.as_ptr();
from_mut(ptr)
将 *mut T 转换为 &mut Cell
unsafe { Cell::from_mut(ptr) }
into_inner()
移除内部值并返回它
let value = shared_state.into_inner();

典型使用场景

1、场景 1:全局状态管理
2、场景 2:闭包中可变状态
3、异步任务状态共享

与 RefCell 区别

特性
Cell
RefCell
值类型要求
运行时检查
无(编译时保证安全)
运行时 borrow 检查
性能
高(零成本)
低(动态检查)
适用场景
单线程、高性能需求
需要动态借用检查的复杂逻辑

总结

Cell 和 RefCell 都是 Rust 提供的零成本抽象,用于在单线程环境下管理不可变状态。Cell 和 RefCell 的区别在于运行时检查,Cell 无运行时检查,RefCell 有运行时检查。Cell 适用于简单的状态管理,RefCell 适用于复杂的状态管理。
Cell 是 Rust 中最轻量级的内部可变性工具,适用于以下场景:
1、单线程环境下的共享可变状态。
2、性能敏感的场景(如高频计数器、缓存)。
3、闭包或异步任务中需要修改外部变量。
4、全局状态或单例模式的管理。
如果需要在多线程间共享数据,或需要更复杂的借用规则,应改用 Mutex、RwLock 或 RefCell。
示例文章示例文章
Loading...