面试题答案
一键面试1. CSP 模型基本概念
通信顺序进程(CSP)模型是一种并发编程模型,它强调通过进程间的消息传递进行通信,而不是共享内存。在 CSP 中,进程是独立的实体,它们通过通道(channel)发送和接收消息来进行交互。这种模型有助于避免共享内存并发编程中常见的竞态条件(race condition)等问题,使并发程序更易于理解和维护。
2. Rust 代码示例
use std::sync::mpsc;
use std::thread;
fn main() {
// 创建一个通道,用于在两个线程之间传递消息
let (tx, rx) = mpsc::channel();
// 克隆发送端,以便在新线程中使用
let tx1 = tx.clone();
// 创建第一个线程
let handle1 = thread::spawn(move || {
// 发送消息到通道
tx1.send(String::from("Hello from thread 1")).unwrap();
});
// 创建第二个线程
let handle2 = thread::spawn(move || {
// 发送消息到通道
tx.send(String::from("Hello from thread 2")).unwrap();
});
// 主线程从通道接收消息
for _ in 0..2 {
match rx.recv() {
Ok(msg) => println!("Received: {}", msg),
Err(_) => println!("Receive error"),
}
}
// 等待线程结束
handle1.join().unwrap();
handle2.join().unwrap();
}
在上述代码中:
- 使用
mpsc::channel()
创建了一个通道,tx
是发送端,rx
是接收端。 - 克隆了发送端
tx1
,以便在不同的线程中使用。 - 两个线程
handle1
和handle2
分别通过发送端tx1
和tx
向通道发送消息。 - 主线程通过接收端
rx
接收并打印消息。最后等待两个线程结束。