当前位置: 首页 > article >正文

rust笔记10-多线程

在 Rust 中,SyncSend 是用于多线程编程的两个关键 trait,它们帮助确保线程安全和数据同步。

SendSync Trait

  1. Send:

    • 表示类型的所有权可以在线程间安全传递。
    • 如果一个类型实现了 Send,它的实例可以从一个线程移动到另一个线程。
    • 大多数类型都实现了 Send,但像 Rc<T> 这样的类型没有实现 Send,因为它的引用计数不是线程安全的。
  2. Sync:

    • 表示类型的引用可以在线程间安全共享。
    • 如果一个类型实现了 Sync,它的引用可以安全地在多个线程中共享。
    • 例如,Mutex<T> 实现了 Sync,因为它提供了线程安全的内部可变性。

多线程间的数据传送

在 Rust 中,多线程间的数据传送通常通过以下方式实现:

  1. 通道(Channel):

    • Rust 提供了 std::sync::mpsc 模块,用于创建多生产者、单消费者的通道。
    • 通道允许一个线程发送数据,另一个线程接收数据。
    • 示例:
      use std::sync::mpsc;
      use std::thread;
      
      fn main() {
             
          let (tx, rx) = mpsc::channel();
      
          thread::spawn(move || {
             
              let val = String::from("hello");
              tx.send(val).unwrap();
          });
      
          let received = rx.recv().unwrap();
          println!("Got: {}", received);
      }
      
  2. 共享内存:

    • 使用 Arc(原子引用计数)和 Mutex 来共享数据。
    • Arc 允许多个线程共享所有权,Mutex 确保同一时间只有一个线程可以访问数据。
    • 示例:
      use std::sync::{
             Arc, Mutex};
      use std::thread;
      
      fn main() {
             
          let counter 

http://www.kler.cn/a/562492.html

相关文章:

  • MySQL 8.0 Enterprise Backup (MEB) 备份与恢复实践指南
  • 力扣hot100 —— 电话号码字母组合; 子集 (非回溯做法)简单易懂
  • ctfshow做题笔记—栈溢出—pwn57~pwn60
  • 基数排序:独特的排序之道
  • C++和OpenGL实现3D游戏编程【连载23】——几何着色器和法线可视化
  • Vue3 + Vite + TS,使用 配置项目别名属性:resolve
  • 补题A-E Codeforces Round 953 (Div. 2)
  • 【Java】数据类型
  • Vue中环境配置的若干问题解决
  • opencv边缘检测
  • mysql大数量表添加索引方案
  • 《AI 大模型 ChatGPT 的传奇》
  • uni-app 开发 App 、 H5 横屏签名(基于lime-signature)
  • 优选算法大集合(待更新)
  • Python 3.11 69 个内置函数(完整版)
  • 《Keras 3 使用 PointNet 进行点云分段》:此文为AI自动翻译
  • ktransformers 上的 DeepSeek-R1 671B open-webui
  • 7种内外网数据交换方案全解析 哪种安全、高效、合规?
  • LLM之论文阅读——Context Size对RAG的影响
  • pip太慢了怎么办 换源下载