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

你好,我是鸟窝。
这一节我们继续学习其它的并发容器,包括 OnceCell、LazyCell 和 Rc。
OnceCell 和 LazyCell
OnceCell
OnceCell<T> 在某种程度上是 Cell 和 RefCell 的混合体,它适用于通常只需要设置一次的值。这意味着可以获得内部值的引用 &T,而无需移动或复制它(与 Cell 不同),也无需运行时检查(与 RefCell 不同)。然而,一旦设置了它的值,就无法更新它,除非你拥有 OnceCell 的可变引用。

下面是一个简单的使用 OnceCell<T> 的例子:
这个类型也比较简单,我们重点学习它的设置或者获取方法,也就是写和读操作。
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
《Rust 并发编程实战课》,新⼈⾸单¥98
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论