面试题答案
一键面试- 引入必要的库:
use std::sync::mpsc; use std::thread;
- 创建通道:
在主线程中创建一个
mpsc
通道,用于主线程向子线程发送中断信号。let (sender, receiver) = mpsc::channel();
- 创建子线程:
使用
thread::spawn
创建子线程,并将receiver
传递进去。let handle = thread::spawn(move || { loop { // 尝试接收中断信号 match receiver.recv() { Ok(_) => { // 接收到中断信号,退出循环 break; }, Err(_) => { // 这里可以处理接收错误的情况,比如通道关闭 break; } } // 子线程的正常工作逻辑 println!("子线程正在工作..."); } });
- 主线程发送中断信号:
在主线程的合适时机,比如满足某个条件时,向子线程发送中断信号。
sender.send(()).unwrap();
- 等待子线程结束:
主线程调用
handle.join()
等待子线程执行完毕。handle.join().unwrap();
整个代码结构大概如下:
use std::sync::mpsc;
use std::thread;
fn main() {
let (sender, receiver) = mpsc::channel();
let handle = thread::spawn(move || {
loop {
match receiver.recv() {
Ok(_) => {
break;
},
Err(_) => {
break;
}
}
println!("子线程正在工作...");
}
});
// 主线程在合适时机发送中断信号
sender.send(()).unwrap();
handle.join().unwrap();
}