经过与 rust 编译器长时间较量,无奈败下阵来。寻找 v 友助阵。
下面的代码想实现,单生产者,多消费者模型。通过 channel 传递 String 变量
use std::sync::mpsc::{channel, Receiver, Sender};
use std::sync::{Arc, Mutex};
use std::thread;
fn main() {
let mut txs = vec![];
let mut rxs: Vec<Arc<Mutex<Receiver<String>>>> = Vec::new();
let mut all_recv = vec![];
for i in 0..5 {
let (tx, rx) = channel();
txs.push(tx);
rxs.push(Arc::new(Mutex::new(rx)));
}
let sender = thread::spawn(move || {
for i in 0..1000 {
let tx = &txs[i % 5];
tx.send(i.to_string()).expect("send fail");
}
});
for i in 0..5 {
let rx = &'static rxs[i];
let receiver = thread::spawn(move || loop {
let value = match rx.lock().unwrap().recv() {
Ok(value) => value,
Err(_) => break,
};
});
all_recv.push(receiver);
}
sender.join();
for (_, v) in all_recv.iter().enumerate() {
v.join();
}
}
error: expected `:`, found `rxs`
--> src/main.rs:24:27
|
24 | let rx = &'static rxs[i];
| ^^^ expected `:`
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.