面试题答案
一键面试- 引入必要的模块:
在Rust代码开头,引入
std::sync::mpsc
模块,用于创建通道。代码如下:
use std::sync::mpsc;
- 创建通道:
在主线程中,使用
mpsc::channel()
函数创建一个通道,该函数返回一个元组,包含发送端(Sender
)和接收端(Receiver
)。
let (tx, rx) = mpsc::channel();
- 创建子线程并传递发送端:
使用
std::thread::spawn
函数创建一个新的子线程,并将通道的发送端(tx
)传递给子线程。子线程执行任务,并在每完成10%的任务时,通过发送端向主线程发送进度信息。
std::thread::spawn(move || {
for i in 0..10 {
// 模拟任务执行
std::thread::sleep(std::time::Duration::from_secs(1));
let progress = (i + 1) * 10;
tx.send(progress).unwrap();
}
});
- 主线程接收进度信息:
主线程通过通道的接收端(
rx
)接收子线程发送的进度信息,并进行相应处理,例如打印进度。
for _ in 0..10 {
let progress = rx.recv().unwrap();
println!("Received progress: {}%", progress);
}
完整代码示例:
use std::sync::mpsc;
use std::thread;
use std::time::Duration;
fn main() {
let (tx, rx) = mpsc::channel();
thread::spawn(move || {
for i in 0..10 {
std::thread::sleep(Duration::from_secs(1));
let progress = (i + 1) * 10;
tx.send(progress).unwrap();
}
});
for _ in 0..10 {
let progress = rx.recv().unwrap();
println!("Received progress: {}%", progress);
}
}