Fix typo in main-with-channel-blocked.md

pull/446/head
lijinpeng 3 years ago
parent fc3517f4bf
commit 29d5f77e9b

@ -1,5 +1,5 @@
# 无处不在的迭代器 # 无处不在的迭代器
Rust 的迭代器无处不在,直至你在它上面栽了跟头,经过深入调查才发现:哦,原来是迭代器的锅。不信的话,看看这个报错你能想到是迭代器的问题吗: `borrow of moved value: words`. Rust 的迭代器无处不在,直至你在它上面栽了跟头,经过深入调查才发现:哦,原来是迭代器的锅。不信的话,看看这个报错你能想到是迭代器的问题吗: `borrow of moved value: words`.
## 报错的代码 ## 报错的代码
以下的代码非常简单,用来统计文本中字词的数量,并打印出来: 以下的代码非常简单,用来统计文本中字词的数量,并打印出来:

@ -1,7 +1,7 @@
# 线程间传递消息导致主线程无法结束 # 线程间传递消息导致主线程无法结束
本篇陷阱较短,主要解决新手在多线程间传递消息时可能会遇到的一个问题:主线程会一直阻塞,无法结束。 本篇陷阱较短,主要解决新手在多线程间传递消息时可能会遇到的一个问题:主线程会一直阻塞,无法结束。
Rust标准库中提供了一个消息通道非常好用也相当简单明了但是但是在使用起来还是可能存在坑 Rust 标准库中提供了一个消息通道,非常好用,也相当简单明了,但是但是在使用起来还是可能存在坑:
```rust ```rust
use std::sync::mpsc; use std::sync::mpsc;
fn main() { fn main() {
@ -39,7 +39,7 @@ Got: 2
其实,上面的描述有问题,主线程并不是卡死,而是`for`循环并没有结束,至于`for`循环不结束的原因是消息通道没有被关闭。 其实,上面的描述有问题,主线程并不是卡死,而是`for`循环并没有结束,至于`for`循环不结束的原因是消息通道没有被关闭。
回忆一下Rust消息通道关闭的两个条件所有发送者全部被`drop`或接收者被`drop`,由于`for`循环还在使用接收者,因为后者条件无法被满足,那么只能发送者全部被`drop`,才能让例子中的消息通道关闭。 回忆一下 Rust 消息通道关闭的两个条件:所有发送者全部被`drop`或接收者被`drop`,由于`for`循环还在使用接收者,因为后者条件无法被满足,那么只能发送者全部被`drop`,才能让例子中的消息通道关闭。
来分析下代码,每一个子线程都从`send`获取了一个拷贝,然后该拷贝在子线程结束时自动被`drop`,看上去没问题啊。等等,好像`send`本身并没有被`drop`,因为`send`要等到`main`函数结束才会被`drop`,那么代码就陷入了一个尴尬的境地:`main`函数要结束需要`for`循环结束,`for`循环结束需要`send`被`drop`,而`send`要被`drop`需要`main`函数结束。。。 来分析下代码,每一个子线程都从`send`获取了一个拷贝,然后该拷贝在子线程结束时自动被`drop`,看上去没问题啊。等等,好像`send`本身并没有被`drop`,因为`send`要等到`main`函数结束才会被`drop`,那么代码就陷入了一个尴尬的境地:`main`函数要结束需要`for`循环结束,`for`循环结束需要`send`被`drop`,而`send`要被`drop`需要`main`函数结束。。。

Loading…
Cancel
Save