Rust 学习笔记(34)-Condvar

参考章节《Rust语言圣经(Rust Course)》第3.6.4章 用条件变量(Condvar)控制线程的同步

如何控制线程执行的顺序?

可以保证线程安全,但有时我们想控制线程执行的顺序该怎么办呢?

答: Rust 为我们提供了而 Condvar(Condition Variables) 条件变量
它通常和Mutex<T>一起使用,一般用于生产者消费者模型,它可以让一个线程进入等待(锁),直至被其他线程唤醒

Rust 学习笔记(33)-Mutex

参考章节《Rust 程序设计语言》第16.2章 共享状态并发
参考章节《Rust语言圣经(Rust Course)》第3.6.4章 线程同步:锁、Condvar 和信号量

除了上一章的Channel(信道)以外,Rust也可以通过操作共享内存的方式在多个线程之间共享数据

两种方式有什么区别

信道(消息传递方式)类似于单所有权,一旦将一个值传送到信道中,将无法再使用这个值。
共享内存类似于多所有权,多个线程可以同时访问相同的内存位置。

由于共享内存拥有多所有权,因此出于线程安全考虑,我们需要一个机制限制同一时刻只能有一个线程能访问这块内存
这个机制就是有很多种,我们先看看一个在多线程场景中最常用的互斥锁,也有叫做互斥体互斥器,它们都是指同一个东西

我猜读到这里你肯定有一个疑问如果我们对它做了限制,那和单所有权有什么区别? 那我为什么还要用共享内存的方式?

这个问题先别着急,我们在本章的最后再来讨论,现在,让我们先看看互斥锁的用法

Rust 学习笔记(30)-循环引用

这一章我建议结合《Rust 语言圣经(Rust Course)》这本书一起看

参考章节《Rust 程序设计语言》第15.6章 引用循环与内存泄漏
参考章节《Rust语言圣经(Rust Course)》第3.5章 循环引用与自引用

这一章主要是在讲内存泄漏问题,如果你现在看不明白,暂时跳过也没关系(因为就算你暂时不了解它,你平常应该也很难写出内存泄漏的代码)
虽然 Rust不保证完全地避免内存泄漏,但你仍然难以写出内存泄漏的代码,除非你故意的,因此你暂时跳过这一章我认为也是可以的

这一章主要在阐述下面两个问题,了解它们,将对你写出更高质量的代码有很大的帮助。

  1. 什么情况可能会发生内存泄漏
  2. 如何最大程度的避免内存泄漏