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 通道:
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");
}
推荐阅读
- git - 为什么 git 已弃用 git update 为 git update-git-for-windows?
- sql-server - 具有相同 session_id 的多个输出
- firebase - Flutter:Firebase 存储不会在发布模式下上传文件
- angular - window:scroll 不适用于 ngx-bootstrap 模式
- scrapy - Scrapy响应不完整获取网址如何
- r - 临时闪亮加载错误:filter_impl
- c - ip_conntrack变成nf_conntrack_ipv4时内核版本是多少
- java - 我收到此 SQLServerException:“结果集没有当前行”。不理解
- python - 在python中调用外部命令,但留在python中
- python - 在 numpy 中执行此操作的最明智的方法是什么?