面试题答案
一键面试在Rust中,使用std::sync::mpsc
模块来创建通道实现线程间通信。mpsc
代表多生产者,单消费者(multiple producer, single consumer)。以下是一个简单的示例,展示如何创建发送端和接收端,并在线程间传递整数:
-
引入必要的模块:
use std::sync::mpsc; use std::thread;
-
创建通道并获取发送端和接收端:
let (tx, rx) = mpsc::channel();
这里
tx
是发送端(transmitter),rx
是接收端(receiver)。 -
创建新线程并传递发送端:
let tx_clone = tx.clone(); thread::spawn(move || { let num = 42; tx_clone.send(num).unwrap(); });
我们克隆了发送端
tx
,这样主线程和新线程都可以使用发送端。新线程将整数42
发送到通道中。 -
在主线程中从接收端获取数据:
let received = rx.recv().unwrap(); println!("Received: {}", received);
rx.recv()
方法会阻塞主线程,直到从通道接收到数据。如果通道关闭并且没有数据,recv
会返回一个错误。这里我们使用unwrap
来简单处理错误,如果成功接收到数据,就打印出来。
完整代码如下:
use std::sync::mpsc;
use std::thread;
fn main() {
let (tx, rx) = mpsc::channel();
let tx_clone = tx.clone();
thread::spawn(move || {
let num = 42;
tx_clone.send(num).unwrap();
});
let received = rx.recv().unwrap();
println!("Received: {}", received);
}
上述代码创建了一个通道,在新线程中发送一个整数,主线程从通道接收该整数并打印。