面试题答案
一键面试创建简单线程并传递不可变字符串
在Rust中,可以使用std::thread::spawn
函数来创建一个新线程,并通过闭包来传递不可变字符串。示例代码如下:
use std::thread;
fn main() {
let s = String::from("Hello, thread!");
let handle = thread::spawn(move || {
println!("The string is: {}", s);
});
handle.join().unwrap();
}
这里使用move
关键字将s
的所有权转移到新线程中,这样新线程就可以使用这个字符串。
使用channel
进行线程间通信的基本步骤
- 创建通道:使用
std::sync::mpsc::channel
函数创建一个通道,该函数返回一个元组,包含发送端(Sender
)和接收端(Receiver
)。
use std::sync::mpsc;
let (sender, receiver) = mpsc::channel();
- 发送数据:在需要发送数据的线程中,使用发送端的
send
方法来发送数据。
sender.send(data).unwrap();
这里data
是要发送的数据,可以是任何实现了Send
和Sync
trait 的类型。
3. 接收数据:在需要接收数据的线程中,使用接收端的recv
方法来接收数据。recv
方法会阻塞当前线程,直到有数据可用。
let received_data = receiver.recv().unwrap();
或者使用try_recv
方法尝试接收数据,该方法不会阻塞,如果没有数据可用则返回Err
。
match receiver.try_recv() {
Ok(data) => println!("Received: {}", data),
Err(_) => println!("No data available yet"),
}
通过以上步骤,就可以使用channel
在不同线程间进行通信。