面试题答案
一键面试-
并发原语:
- 线程(
std::thread
):用于创建并发执行的任务。可以分别创建一个线程用于从控制台读取数据,另一个线程用于向控制台输出处理后的结果。 - 通道(
std::sync::mpsc
):用于在两个线程之间传递数据。从控制台读取的数据通过通道发送给负责输出的线程。
- 线程(
-
代码框架示例:
use std::sync::mpsc::{channel, Receiver, Sender};
use std::thread;
fn main() {
let (tx, rx): (Sender<String>, Receiver<String>) = channel();
// 读取线程
thread::spawn(move || {
loop {
let mut input = String::new();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
tx.send(input.trim().to_string()).expect("Failed to send data");
}
});
// 输出线程
thread::spawn(move || {
for data in rx {
// 这里可以对数据进行处理
let processed_data = format!("Processed: {}", data);
println!("{}", processed_data);
}
});
// 主线程等待
loop {
thread::park();
}
}
在上述代码中:
- 首先创建了一个通道
(tx, rx)
,tx
用于发送数据,rx
用于接收数据。 - 读取线程通过
std::io::stdin().read_line
从控制台读取数据,并通过tx.send
将数据发送到通道。 - 输出线程通过
rx
接收数据,对数据进行简单处理(这里只是添加了一个前缀),然后通过println!
输出到控制台。 - 主线程通过
thread::park()
保持程序运行,防止主线程退出导致整个程序提前结束。