rust: 线程通信代码-编译有问题(寻求帮助)

2019-11-21 19:01:51 +08:00
 guonaihong

经过与 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 `:`

3258 次点击
所在节点    Rust
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/621869

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX