2. Rust 内部可变性(`Internal mutability`)

幻灰龙 2021-06-05 10:42:24

上一条:Rust 所有权Ownership   下一条:Rust基件:Cell

在Rust的对象所有权机制下,带来好处的同时也带来不便,这种不便是有原因的。但是我们先看下语言提供了什么机制来解决这种不便。

有时候,我们需要【不可变借用的内部成员变量可变,在Rust里面叫做内部可变性(`Internal mutability`)】。那么,有如下选择,它们内部都依赖底层的 `UnsafeCell` 实现,顾名思义这么做是 `unsafe` 的,但是编译器知道这些调用的地方需要特殊处理。

  • 单线程
    • 如果类型 `T` 实现了 trait `Copy`,那么可以使用 `Cell<T>`
    • 否则,可以使用 `RefCell<T>`
  • 多线程
    • 使用互斥锁: `Mutex<T>`
    • 使用读写锁: `RwLock<T>`

 

先知道怎么用,后面我们再来讨论为什么。

...全文
2727 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 助教 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-编程语言 发布问题, 以便更快地解决您的疑问

1,725

社区成员

发帖
与我相关
我的任务
社区描述
Rust是新一代大规模底层系统平台开发的强力选项,拥有现代的类型系统,精确的生命周期控制,流畅的表达力和错误处理,以及明晰的异步编程范式。
rust 个人社区
社区管理员
  • 幻灰龙
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
社区主要目的: 1. 讨论Rust的核心语法语义 2. 讨论Rust的编程范式、最佳实践。 3. 讨论10x创新技术

试试用AI创作助手写篇文章吧