Rust 使用线程和通道来防止代码死机

Rust 使用线程和通道来防止代码死机,rust,Rust,我正在写我的第一个Rust程序,但陷入了恐慌。代码一直运行到恐慌评论,这里是否有明显的遗漏 fn print_num(n:i32) { println!("Hi! {}", n); } fn main() { let (s, r) = std::sync::mpsc::channel(); let (s1, r1) = std::sync::mpsc::channel(); std::thread::spawn(move || {

我正在写我的第一个Rust程序,但陷入了恐慌。代码一直运行到恐慌评论,这里是否有明显的遗漏

fn print_num(n:i32)
{
    println!("Hi! {}", n);
}

fn main() 
{
    let (s, r) = std::sync::mpsc::channel();
    let (s1, r1) = std::sync::mpsc::channel();
    std::thread::spawn(move || {
        let i  = r.recv().unwrap();
        print_num(i);
        s1.send(i+1).unwrap();
    });
    s.send(0).unwrap();
    println!("Got back {}", r1.recv().unwrap());
    // Panic code below
    s.send(1).unwrap();
    println!("Got back {}", r1.recv().unwrap());

    println!("Hello, world!");
}

s.send()
的第二个调用返回一个。文件内容如下:

只有当通道的接收端断开连接时,发送操作才会失败,这意味着永远无法接收数据

您的接收器
r
被移动到线程中,读取一条消息,然后被销毁。下一次呼叫没有人接收消息1。也许您希望线程在某种循环中重复处理消息

相关的:


一,。这可能并不总是死机,因为它依赖于线程的执行顺序。

s.send()的第二次调用返回一个错误。文件内容如下:

只有当通道的接收端断开连接时,发送操作才会失败,这意味着永远无法接收数据

您的接收器
r
被移动到线程中,读取一条消息,然后被销毁。下一次呼叫没有人接收消息1。也许您希望线程在某种循环中重复处理消息

相关的:

一,。这可能并不总是死机,因为它依赖于线程执行顺序