编程语言
3429
7 分钟
参考章节《Rust 程序设计语言》第16.2章 共享状态并发
参考章节《Rust语言圣经(Rust Course)》第3.6.4章 线程同步:锁、Condvar 和信号量
除了上一章的Channel(信道)以外,Rust也可以通过操作共享内存的方式在多个线程之间共享数据
两种方式有什么区别
信道(消息传递方式)类似于单所有权,一旦将一个值传送到信道中,将无法再使用这个值。
共享内存类似于多所有权,多个线程可以同时访问相同的内存位置。
由于共享内存拥有多所有权,因此出于线程安全考虑,我们需要一个机制来限制同一时刻只能有一个线程能访问这块内存
这个机制就是锁,锁有很多种,我们先看看一个在多线程场景中最常用的互斥锁,也有叫做互斥体、互斥器,它们都是指同一个东西
我猜读到这里你肯定有一个疑问如果我们对它做了限制,那和单所有权有什么区别? 那我为什么还要用共享内存的方式?
这个问题先别着急,我们在本章的最后再来讨论,现在,让我们先看看互斥锁的用法
编程语言
1189
3 分钟
参考章节《Rust 程序设计语言》第16.2章 使用消息传递在线程间传送数据
学习线程的两大难点
- 如何在
多个线程之间共享数据
- 如何保证
线程安全
这一章我们就来看看在Rust中如何在多个线程之间共享数据
编程语言
1137
3 分钟
参考章节《Rust 程序设计语言》第16.1章 使用线程同时运行代码
线程就是程序内部,可以同时运行的独立部分。平常我们说的多线程编程,就是指编写内部有多个任务同时运行的程序
编程语言
2179
5 分钟
这一章我建议结合《Rust 语言圣经(Rust Course)》这本书一起看
参考章节《Rust 程序设计语言》第15.6章 引用循环与内存泄漏
参考章节《Rust语言圣经(Rust Course)》第3.5章 循环引用与自引用
这一章主要是在讲内存泄漏问题,如果你现在看不明白,暂时跳过也没关系(因为就算你暂时不了解它,你平常应该也很难写出内存泄漏的代码)
虽然 Rust 并 不保证完全地避免内存泄漏,但你仍然难以写出内存泄漏的代码,除非你故意的,因此你暂时跳过这一章我认为也是可以的
这一章主要在阐述下面两个问题,了解它们,将对你写出更高质量的代码有很大的帮助。
什么情况可能会发生内存泄漏
如何最大程度的避免内存泄漏
编程语言
2040
5 分钟
参考章节《Rust 程序设计语言》第15.5章 RefCell<T> 和内部可变性模式
《Rust 程序设计语言》上这一章,我实在是懒得吐槽,举的例子太啰嗦(复杂),这一章不建议看这本书
关于这一章,我推荐看下面这本开源书
参考章节《Rust语言圣经(Rust Course)》第3.4.5章 Cell 和 RefCell 内部可变性