Skip to content

Commit

Permalink
docs: rust - concurrency
Browse files Browse the repository at this point in the history
  • Loading branch information
ryan4yin committed Sep 17, 2024
1 parent 95d05b8 commit 013a8b6
Showing 1 changed file with 17 additions and 3 deletions.
20 changes: 17 additions & 3 deletions pl/rust/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# Rust 语言

> 个人笔记,不保证准确性。
## 需要注意的知识点

### 所有权
Expand Down Expand Up @@ -106,7 +108,7 @@ rust 的高阶函数 + 链式语法超级好用!
## 并发编程

Rust 的 Ownership 与 Borrowing 机制不仅降低了内存泄漏的可能,还能有效避免并发编程中的数据竞争问题。
许多 C 语言中的并发问题,比如死锁、数据竞争等,在 Rust 中都是编译期错误。
许多 C 语言中的并发问题在 Rust 中都是编译期错误。

Rust 的线程实现使用 1:1 模型,即一个 Rust 线程对应一个 OS 线程。

Expand All @@ -120,9 +122,21 @@ Rust 的线程实现使用 1:1 模型,即一个 Rust 线程对应一个 OS 线
- 在 Go 等语言中,共享内存很容易出现数据竞争问题,所以 Go 强烈推荐 channel 模型,避免使用共享内
存。但 Rust 的 Ownership 与 Borrowing 机制,使得共享内存模型更加安全,因此 Rust 的共享内存模型也
值得一试。
- `Mutex<T>`: 互斥锁
- `Mutex<T>`: 互斥锁,也可以理解为 `RefCell<T>` 的并发安全版本。
- 因为通常需要多处引用,常以 `Rc::new(Mutex::new(0))` 的形式使用。
- `Arc<T>`: 并发安全的原子引用
- 它与 `RefCell<T>` 都是「内部可变性」的 `Box<T>` 智能指针,所有引用都可以调用 `lock` 来尝试获取互
斥锁。
- `Arc<T>`: 并发安全的原子引用,即 `Rc<T>` 的并发安全版本。

- 两个并发安全的 Traits
- `Send`: 实现了这个 Trait 的数据类型可安全地跨线程传递
- `Sync`: 实现了这个 Trait 的数据类型可安全地在多线程中共享
- 上述两个 Traits 甚至没有任何方法,只是一个标记。
- 手动实现 `Send`/`Sync` Trait 可能会导致并发问题,因此必须使用 `unsafe` 关键字。

不像 Go/C 等语言中,你可以在并发编程中使用普通的非线程安全的数据结构,而在 Rust 中,你如果在并发编程
中使用 `Box<T>`/`Rc<T>` 等数据结构,编译器会直接报错,告诉你它们未实现 `Send`/`Sync` trait,即不是线
程安全的。

## 宏 - macro

Expand Down

0 comments on commit 013a8b6

Please sign in to comment.