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

Rust 的 Arc<Mutex<T>> 的用法示例源代码

在 Rust 中,Arc<Mutex<T>> 是一种组合类型,它结合了 Arc(原子引用计数)和 Mutex(互斥锁)。Arc 用于在多个所有者之间共享数据,而 Mutex 用于确保在任意时刻只有一个线程可以访问被保护的数据。这种组合类型在并发编程中非常有用,特别是当你需要在多个线程之间安全地共享和修改数据时。

下面是一个使用 Arc<Mutex<T>> 的简单示例,它演示了如何在多线程环境中安全地共享和修改一个整数值:

use std::sync::{Arc, Mutex};
use std::thread;
use std::random;fn main() {// 创建一个 Arc<Mutex<i32>>,初始值为 0let counter = Arc::new(Mutex::new(0));// 创建多个线程,每个线程都会增加计数器的值let mut threads = Vec::new();for _ in 0..10 {let counter = counter.clone();let thread = thread::spawn(move || {// 获取互斥锁,以便安全地访问和修改计数器的值let mut num = counter.lock().unwrap();// 随机增加计数器的值*num += random::thread_rng().gen_range(1..=10);});threads.push(thread);}// 等待所有线程完成for thread in threads {thread.join().unwrap();}// 打印最终的计数器值let final_count = counter.lock().unwrap();println!("Final counter value: {}", *final_count);
}

在这个示例中,我们首先创建了一个 Arc<Mutex<i32>>,其中包含一个初始值为 0 的 i32 类型的计数器。然后,我们创建了 10 个线程,每个线程都会获取互斥锁,以便安全地访问和修改计数器的值。每个线程都会随机增加计数器的值。最后,我们等待所有线程完成,并打印最终的计数器值。

请注意,我们在每个线程中使用 counter.clone() 来获取 Arc<Mutex<i32>> 的一个克隆。这是因为 Arc 允许我们创建多个指向同一数据的引用,而 Mutex 则确保在任意时刻只有一个线程可以访问被保护的数据。这种组合使得 Arc<Mutex<T>> 成为 Rust 中处理并发共享数据的一种强大工具。

http://www.lryc.cn/news/319154.html

相关文章:

  • 【NR 定位】3GPP NR Positioning 5G定位标准解读(十六)-UL-AoA 定位
  • 如何理解闭包
  • python知识点总结(一)
  • 【Poi-tl Documentation】区块对标签显示隐藏改造
  • 第十四届蓝桥杯 三国游戏
  • 数据结构——通讯录项目
  • 学点Java打小工_Day4_数组_冒泡排序
  • 内存分配方式?
  • 2024/3/17周报
  • 函数连续性和Lipschitz连续性
  • Qt 鼠标滚轮示例
  • 【Unity】进度条和血条的三种做法
  • 多人聊天室 (epoll - Linux网络编程)
  • vite配置
  • 服务器生产环境问题解决思路
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Column)
  • LLM之RAG实战(三十)| 探索RAG语义分块策略
  • 软件测试-------Web(性能测试 / 界面测试 / 兼容性测试 / 安全性测试)
  • 工欲善其事,必先利其器,Markdown和Mermaid的梦幻联动(2)
  • STM32基础--使用寄存器点亮流水灯
  • 代码随想录训练营Day25:● 216.组合总和III ● 17.电话号码的字母组合
  • SwiftUI的 特性 - ViewModify
  • 中间件 | RPC - [Dubbo]
  • 【中等】保研/考研408机试-二叉树相关
  • 自动驾驶---Motion Planning之构建SLT Driving Corridor
  • 本地文件包含漏洞利用
  • 【docker】docker的常用命令
  • jmeter实战
  • 面试官常问问题
  • 外包就干了2个月,技术退步明显....