multithreading - 如何在 Rust 中同时运行不同的线程?

标签 multithreading rust

假设我有两个具有不同意图的线程(T1、T2)。 T1 负责将消息插入队列,T2 负责弹出消息。如何实现同时运行 T1 和 T2 的方法?

我尝试查看 Rust 中现有的多线程实现和示例,但其中大多数都是关于为同一作业生成多个线程。

//using an Arc object of an ArrayQueue
let handle1 = thread::spawn( move || {
//clone arc object
//push
});

let handle2 = thread::spawn( move || {
//clone arc object
//pop
});```

最佳答案

您认为为什么线程没有同时运行? 为了在线程之间轻松传递数据,您可以使用 std 库中的 MPSC channel :

use std::time::Duration;

fn main() {
    let (sender, receiver) = std::sync::mpsc::channel();

    let sending_thread = std::thread::spawn(move || {
        for i in 0..10 {
            println!("[{:?}] Sending: {}", std::thread::current().id(), i);
            sender.send(i).unwrap();
            std::thread::sleep(Duration::from_secs(1));
        }
    });

    let receiving_thread = std::thread::spawn(move || {
        for i in receiver {
            println!("[{:?}] Received: {}", std::thread::current().id(), i);
        }
    });

    let _ = sending_thread.join();
    let _ = receiving_thread.join();
    println!("Done");
}

关于multithreading - 如何在 Rust 中同时运行不同的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57831428/

相关文章:

c# - LINQ to Entities 无法识别方法 'System.Threading.Tasks.Task`

C : Multithreading using ucontext/Floating point exception(core dumped)

multithreading - 在线程之间发送数据的惯用方法是什么?

rust - 链接迭代器以引用不同的生活时间

rust - 当在 rust 迹中执行命令时,程序结束

java - 如何在另一个线程完成其操作后运行一个线程

C# 异步套接字 - 线程逻辑

java - 使用嵌入式 ObjectDB 进行多线程处理

enums - 库编写者选择的替代子类型的首选方法是什么,为什么?

generics - 类型参数不受 impl 特征、自身类型或谓词的约束