rust语言学习笔记(指针八)Mutex<T>(跨线程安全的RefCell<T>)
MutexT互斥锁Mutual Exclusion是标准库std::sync模块提供的核心同步原语。它的主要作用是‌在多线程环境下保护共享数据确保同一时刻只有一个线程可以访问或修改该数据‌从而避免数据竞争Data Race。8.1Mutex::new(data)创建Mutex‌功能‌创建一个新的Mutex包裹初始数据。‌用途‌初始化共享状态。8.2.lock()阻塞获取锁‌功能‌尝试获取互斥锁。如果锁当前被其他线程持有当前线程会‌阻塞‌进入睡眠状态直到锁被释放。‌用途‌这是最常用的方法适用于必须获取锁才能继续执行的场景。注意事项‌返回的MutexGuard实现了Deref和DerefMut可以直接操作内部数据。当MutexGuard离开作用域时析构函数会自动释放锁。如果前一个持有锁的线程发生了恐慌Panic锁会被标记为“中毒”Poisoned此时.lock()会返回Err。通常使用.unwrap()处理但在生产环境中建议妥善处理PoisonError。usestd::sync::Mutex;fnmain(){letvMutex::new(1);// 1. 获取锁并修改值letmutv1v.lock().unwrap();*v12;println!({:?},v1);drop(v1);// 释放锁// 2. 再次获取锁matchv.lock(){Ok(mutv2){*v23;println!({:?},v2)}Err(e){println!(锁中毒: {:?},e);}}}8.3.try_lock()非阻塞尝试获取锁‌功能‌尝试立即获取锁。如果锁可用则获取并返回Ok(Guard)如果锁已被占用则‌立即返回错误‌不会阻塞当前线程。‌用途‌适用于需要避免死锁、实现自定义重试逻辑、或在无法获取锁时需要执行其他备用逻辑的场景。matchv.try_lock(){Ok(mutv3){*v34;println!({:?},v3)}Err(e)matche{std::sync::TryLockError::Poisoned(_){println!(锁中毒: {:?},e);}std::sync::TryLockError::WouldBlock{println!(锁已被占用: {:?},e);}},}8.4.into_inner()消费Mutex提取数据‌功能‌消费ConsumeMutex本身返回内部包裹的数据T。‌用途‌当不再需要多线程同步希望将数据转移出来时使用。常用于程序结束前获取最终结果或在单线程上下文中解开包装。‌注意‌调用后Mutex实例将被销毁无法再使用。matchv.into_inner(){Ok(mutv4){v45;println!({:?},v4)}Err(e){println!(锁中毒: {:?},e);}}// v 已销毁无法再使用8.5.get_mut()无锁获取可变引用‌功能‌获取内部数据的可变引用mut T。‌用途‌‌无需加锁‌。因为该方法要求借用mut self编译器静态保证了此时没有其他线程或守卫持有该锁。适用于初始化阶段、单线程环境或在确定没有并发访问时的性能优化。‌注意‌如果在多线程环境下错误地使用例如通过unsafe绕过检查会导致数据竞争。letmutvMutex::new(1);matchv.get_mut(){Ok(vv){*vv1;println!({:?},vv);}Err(e){println!(锁中毒: {:?},e);}}8.6PoisonError::into_inner()恢复中毒数据所有返回LockResult的方法lock,try_lock,into_inner,get_mut都可能返回PoisonError。‌恢复数据‌可以通过PoisonError::into_inner()从错误中提取出MutexGuard或数据继续访问。这表示开发者承认数据可能不一致但决定继续使用。matchv.lock(){Ok(mutv2){*v23;println!({:?},v2)}Err(e){println!(锁中毒: {:?},e);letmutv0e.into_inner();// 从错误中提取出 MutexGuard 或数据*v00;// 重新初始化数据为0}}

相关新闻

3分钟掌握:如何将Android手机变身为USB键盘鼠标的终极指南

3分钟掌握:如何将Android手机变身为USB键盘鼠标的终极指南

3分钟掌握:如何将Android手机变身为USB键盘鼠标的终极指南 【免费下载链接】android-hid-client Android app that allows you to use your phone as a keyboard and mouse WITHOUT any software on the other end (Requires root) 项目地址: https://gitcode.com…

2026/7/2 11:20:08阅读更多 →
【VMware虚拟机IP固化终极指南】:20年运维专家亲授3种永久固定IP方案,99%用户忽略的DHCP陷阱曝光

【VMware虚拟机IP固化终极指南】:20年运维专家亲授3种永久固定IP方案,99%用户忽略的DHCP陷阱曝光

更多请点击: https://kaifayun.com 第一章:VMware虚拟机IP固化的核心原理与风险全景 VMware虚拟机IP固化并非操作系统层面的静态配置,而是通过网络栈、DHCP客户端行为与vSphere底层网络策略三者协同作用的结果。其核心原理在于:当…

2026/7/2 11:20:08阅读更多 →
CVE-2025-33073漏洞防御:从SSRF原理到企业级纵深防护实战

CVE-2025-33073漏洞防御:从SSRF原理到企业级纵深防护实战

1. 项目概述:直面CVE-2025-33073的威胁最近在安全圈里,CVE-2025-33073这个编号被讨论得挺多。它不是那种一出现就惊天动地的零日漏洞,但恰恰是这种存在于广泛使用的开源组件或中间件中的“潜伏者”,一旦被利用,造成的破…

2026/7/2 11:20:08阅读更多 →
网络安全实战:5款高效漏洞挖掘工具链构建与自动化工作流指南

网络安全实战:5款高效漏洞挖掘工具链构建与自动化工作流指南

1. 项目概述:为什么漏洞挖掘工具是网安人的“瑞士军刀”?刚入行那会儿,我总觉得漏洞挖掘是件很“玄学”的事,全靠灵光一现和运气。后来踩了无数坑才明白,真正的高手,是把“玄学”变成“科学”的过程。而这个…

2026/7/2 12:35:22阅读更多 →
收藏 | AI时代工程师进化指南:5种能力取向谁更值钱?小白程序员必看!

收藏 | AI时代工程师进化指南:5种能力取向谁更值钱?小白程序员必看!

本文探讨了未来工程师的五种能力取向:原型手、建设者、清理者、增长者和维护者,并分析了不同能力在产品不同发展阶段的重要性。通过Anthropic Claude Code团队的案例,强调了根据产品阶段合理配置团队能力的关键,以及AI时代如何根据…

2026/7/2 12:35:22阅读更多 →
Linuxshell编程基础课堂笔记+课后练习

Linuxshell编程基础课堂笔记+课后练习

一、什么是shell&命令行CLI 1.图形桌面出现前,操作unix/Linux唯一方式是命令行CLI,仅支持文本输入输出。 物理控制台切换:CtrlAltF1/F7 Ubuntu图形界面:F7 图形桌面内使用:打开终端仿真器调出shell 2.Bash Shell基…

2026/7/2 12:35:22阅读更多 →
大模型时代AI产品经理的转型与实战指南

大模型时代AI产品经理的转型与实战指南

1. 大模型时代的产品经理新挑战2023年ChatGPT的爆发式增长彻底改变了AI行业的游戏规则。作为在这个行业摸爬滚打多年的产品老兵,我亲眼见证了传统AI产品经理面对大模型技术时的集体焦虑。上周和几位同行喝酒,一个在头部互联网公司做了5年AI产品的朋友突然…

2026/7/2 12:35:22阅读更多 →
VS2010乱码问题解决

VS2010乱码问题解决

关闭 Windows 的“Beta: 使用 Unicode UTF-8 提供全球语言支持 -控制面板 / 设置里找:区域 -> 管理 -> 更改系统区域设置 -设置为 中文(简体,中国) -取消勾选 Beta: 使用 Unicode UTF-8 提供全球语言支持 -重启电脑 -回 VS 里 Clean 后重新 Build

2026/7/2 12:35:22阅读更多 →
基于memuc与Appium的逍遥模拟器自动化测试全流程实战

基于memuc与Appium的逍遥模拟器自动化测试全流程实战

1. 项目概述:为什么是逍遥模拟器与memuc?在移动应用自动化测试的领域里,选择一个稳定、高效且易于控制的安卓模拟器,往往是项目成功的第一步。真机固然真实,但批量管理、环境隔离和快速回滚的需求,让模拟器…

2026/7/2 12:30:22阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/2 12:10:34阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/7/2 12:10:34阅读更多 →
塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧

塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧

塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧 【免费下载链接】BOTW-Save-Editor-GUI A Work in Progress Save Editor for BOTW 项目地址: https://gitcode.com/gh_mirrors/bo/BOTW-Save-Editor-GUI 想在《塞尔达传说:旷野之息…

2026/7/2 0:03:01阅读更多 →
告别 AccessKey:多云平台 CLI OAuth 免密认证完全指南

告别 AccessKey:多云平台 CLI OAuth 免密认证完全指南

在本地开发环境使用云厂商 CLI 时,传统的 AccessKey(AK)方式需要手动创建、下载和保管密钥,不仅繁琐,还存在泄漏风险。其实,主流云平台都已提供基于 OAuth 2.0 的免密认证方案,让开发者可以通过浏览器登录一次性完成授权,CLI 自动管理临时凭证的刷新,兼顾了便利与安全…

2026/7/2 0:03:01阅读更多 →
基于13DOF传感器与PIC32MZ的高精度嵌入式导航系统设计

基于13DOF传感器与PIC32MZ的高精度嵌入式导航系统设计

1. 项目背景与核心价值在嵌入式系统开发领域,高精度定位与导航一直是极具挑战性的技术方向。传统方案往往面临成本、精度和实时性难以兼顾的困境。这个项目通过13DOF(13自由度)传感器组合与PIC32MZ2048EFH100高性能MCU的协同工作,…

2026/7/2 0:03:01阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/2 0:33:58阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/2 1:32:11阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/2 1:50:13阅读更多 →