Rust 并发编程实战课
晁岳攀(鸟窝)
前微博技术专家,知名微服务框架 rpcx 作者
588 人已学习
新⼈⾸单¥98
登录后,你可以任选4讲全文学习
课程目录
已更新 23 讲/共 38 讲
Rust 并发编程实战课
15
15
1.0x
00:00/00:00
登录|注册

20|海纳百川,有容乃大:并发容器(下)

你好,我是鸟窝。
这一节我们继续学习其它的并发容器,包括 OnceCellLazyCellRc

OnceCell 和 LazyCell

OnceCell

OnceCell<T> 在某种程度上是 CellRefCell 的混合体,它适用于通常只需要设置一次的值。这意味着可以获得内部值的引用 &T,而无需移动或复制它(与 Cell 不同),也无需运行时检查(与 RefCell 不同)。然而,一旦设置了它的值,就无法更新它,除非你拥有 OnceCell 的可变引用。
下面是一个简单的使用 OnceCell<T> 的例子:
use std::cell::OnceCell;
fn main() {
let cell = OnceCell::new();
assert!(cell.get().is_none());
let value: &String = cell.get_or_init(|| {
"Hello, World!".to_string()
});
assert_eq!(value, "Hello, World!");
assert!(cell.get().is_some());
}
这个类型也比较简单,我们重点学习它的设置或者获取方法,也就是写和读操作。
new 创建一个新的 OnceCell。创建一个新的 OnceCell<T> 实例,还未初始化过。
set 设置单元格的值。将单元格的内容设置为 value。如果单元格为空,此方法返回 Ok(());如果单元格已满(即已被设置),则返回 Err(value)
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. `OnceCell`和`LazyCell`用于解决数据只需要初始化一次,并且在之后可以随时访问的情况,以及在特定情况下才会被用到的问题。 2. `Rc<T>`允许一个值有多个所有者,通过跟踪引用计数来决定何时清理值,适用于构建复杂数据结构如树、图等。 3. `Rc<T>`的常用方法包括`new`创建新的`Rc`、`clone`克隆、`strong_count`返回当前引用计数、`downgrade`增加弱引用计数等。 4. `Rc<T>`的`make_mut`方法可以将给定的`Rc`转换为可变引用,确保唯一的拥有权。 5. `Rc<T>`在Rust的所有权系统中发挥着重要的作用,特别是在处理多个所有者的情况下,保证内存安全性。 6. `Arc<T>`是线程安全的引用计数指针,适用于多线程环境中共享所有权。 7. `Arc<T>`对 `Clone` 等 trait 的实现也可以使用完全限定语法调用。 8. `Arc<T>`和`Rc<T>`的区别在于`Arc`是线程安全的,而`Rc`不是,适用于跨线程访问数据的情况。 9. Rust的方法命名规范遵循一定的语义和一致性规则,通过方法名可以快速了解方法的作用及其与数据所有权、引用的关系。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Rust 并发编程实战课》
新⼈⾸单¥98
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部