Rust 学习笔记(34)-Condvar
参考章节《Rust语言圣经(Rust Course)》第3.6.4章 用条件变量(Condvar)控制线程的同步
如何控制线程执行的顺序?
锁
可以保证线程安全
,但有时我们想控制线程执行的顺序
该怎么办呢?
答: Rust 为我们提供了而 Condvar(Condition Variables)
条件变量
它通常和Mutex<T>
一起使用,一般用于生产者消费者模型
,它可以让一个线程进入等待(锁)
,直至被其他线程唤醒
参考章节《Rust语言圣经(Rust Course)》第3.6.4章 用条件变量(Condvar)控制线程的同步
如何控制线程执行的顺序?
锁
可以保证线程安全
,但有时我们想控制线程执行的顺序
该怎么办呢?
答: Rust 为我们提供了而 Condvar(Condition Variables)
条件变量
它通常和Mutex<T>
一起使用,一般用于生产者消费者模型
,它可以让一个线程进入等待(锁)
,直至被其他线程唤醒
参考章节《Rust 程序设计语言》第16.2章 共享状态并发
参考章节《Rust语言圣经(Rust Course)》第3.6.4章 线程同步:锁、Condvar 和信号量
除了
上一章的Channel(信道)
以外,Rust也可以通过操作共享内存
的方式在多个线程之间共享数据
两种方式有什么区别
信道(消息传递方式)
类似于单所有权
,一旦将一个值传送到信道中,将无法再使用这个值。
共享内存
类似于多所有权
,多个线程可以同时访问相同的内存位置。
由于共享内存
拥有多所有权
,因此出于线程安全考虑
,我们需要一个机制
来限制同一时刻只能有一个线程能访问这块内存
这个机制
就是锁
,锁
有很多种,我们先看看一个在多线程场景中最常用的互斥锁
,也有叫做互斥体
、互斥器
,它们都是指同一个东西
我猜
读到这里你肯定有一个疑问如果我们对它做了限制,那和单所有权有什么区别? 那我为什么还要用共享内存的方式?
这个问题先别着急,我们在本章的最后再来讨论,现在,让我们先看看互斥锁
的用法
参考章节《Rust 程序设计语言》第16.2章 使用消息传递在线程间传送数据
学习线程
的两大难点
多个线程之间共享数据
线程安全
这一章我们就来看看在Rust中如何在多个线程之间共享数据
参考章节《Rust 程序设计语言》第16.1章 使用线程同时运行代码
线程
就是程序内部
,可以同时运行的独立部分。平常我们说的多线程编程
,就是指编写内部有多个任务同时运行的程序
这一章我建议结合
《Rust 语言圣经(Rust Course)》
这本书一起看
参考章节《Rust 程序设计语言》第15.6章 引用循环与内存泄漏
参考章节《Rust语言圣经(Rust Course)》第3.5章 循环引用与自引用
这一章主要是在讲
内存泄漏
问题,如果你现在看不明白,暂时跳过
也没关系(因为就算你暂时不了解它,你平常应该也很难写出内存泄漏的代码)
虽然Rust
并不保证完全地避免内存泄漏
,但你仍然难以写出内存泄漏的代码,除非你故意的,因此你暂时
跳过这一章我认为也是可以的
这一章主要在阐述下面两个问题,了解它们,将对你写出更高质量
的代码有很大的帮助。
什么情况可能会发生内存泄漏
如何最大程度的避免内存泄漏