深入浅出Rust(第四部分)

2021-01-28  本文已影响0人  沉寂之舟

传送门:
深入浅出Rust(第一部分-1)
深入浅出Rust(第一部分-2)
深入浅出Rust(第二部分-1)
深入浅出Rust(第二部分-2)
深入浅出Rust(第三部分-1)
深入浅出Rust(第三部分-2)
深入浅出Rust(第四部分)
深入浅出Rust(第五部分)


第四部分 - 线程安全

Rust在编译器层面做了很多工作,进而在编译过程就发现和阻止线程不安全的情形

第27章 线程安全

1. 什么是线程

2. 启动线程

thread::spawn(MOVE ||{
    //线程内部逻辑
});

相当于做了闭包代码块

Thead模块常用API:

3. 避免数据竞争

直接传mut变量,copy类型进去,都会造成编译错误.

4. send & Sync

Rust正是通过这两个特殊的trait,对线程安全进行了控制

pub fn spawn<F,T>(f: F) -> JoinHandle<T>
    where F: FnOne() -> T, F:Send + 'static, T: Send +'static

从spawn的函数签名可以参数,F和T需要满足Send trait,因此在线程间传递所有权会发生安全问题的类型,Rust就能检测出来.

第28章 详解Send和Sync

1. 什么是Send

2. 什么是Sync

3. 自动推理

第29章 状态共享

1. ARC

29-1.png

2. Mutex(重点)

type LockResult<Guard> = Result<Guard, PoisonError<Guard>>;

如果lock过程发生了panic,那么这个Mutex则变为"有毒"状态.

3. RwLock

4. Atomic

5. 死锁

6. Barrier

7. Condvar(重点)

29-2.png

8. 全局变量

9. 线程局部存储

第30章 管道

显然,Rust的channel比起Go,还是有差距的.

1. 异步管道

2. 同步管道

第31章 第三方并行开发库

1. threadpool

2. scoped-threadpool

3. parking_lot

4. crossbeam

5. rayon

31-1.png
上一篇 下一篇

猜你喜欢

热点阅读