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 函数可以创建同步通道,发送消息的时候会阻塞;