Skip to main content

线程

use std::thread;

fn main() {
let handler = thread::spawn(||{
println!("Hello, World!");
});

println!("{:?}", handler.join());
}
- join() 会阻塞当前线程的执行,直到句柄对应的线程终止。
- join() 返回对应线程返回值的 Ok,或者是 Err。


当前正在运行的线程可以调用 thread::park() 来暂停自己的执行;
可以通过线程的unpark() 来继续执行;

use std::{thread, time::Duration};

fn main() {
let handler = thread::spawn(||{
thread::park();
println!("Hello, World!");
});

println!("main");

thread::sleep(Duration::from_micros(100));
handler.thread().unpark();
}


Rust 类型系统包含了满足并发承诺的特征

- Send:可以在线程间安全转移的类型
- Sync:可以在线程间(通过引用)安全共享的类型


ock 方法返回一个 LockResult。

- 如果是 Ok(MutexGuard),那么互斥锁没有中毒,可以正常使用。
- 如果是 Err(PoisonError),那么互斥锁处于中毒状态

std::sync::mpsc
实现多生产者、单消费者的通信功能(Muliti-Producer, Single-Consumer)。

主要设计三种类型

Sender :用于给 Receiver 发送数据,可以克隆,交给多个线程实现多生产者

SyncSender:用于给 Receiver 发送数据

Receiver:不能克隆,因此是单消费者

使用 channel 函数创建一对链接,Sender 是异步通道,发送数据的时候不会阻塞发生线程。

使用 sync_channel 函数可以创建同步通道,发送消息的时候会阻塞;