首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Rust中并发运行不同的线程?

如何在Rust中并发运行不同的线程?
EN

Stack Overflow用户
提问于 2019-09-07 14:55:30
回答 1查看 548关注 0票数 1

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

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

代码语言:javascript
复制
//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
});```
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-07 15:20:57

为什么你认为线程没有并发运行?为了方便地在线程之间传递数据,您可以使用std库中的MPSC通道:

代码语言:javascript
复制
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");
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57831428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档