Rust 学习笔记:关于共享状态并发的练习题

Rust学习笔记2025.6.16 本文分享了基于Rust的Web开发实践笔记,涵盖主流框架Axum、Actix-web和Rocket的应用示例。主要内容包括:1)使用Axum构建高性能供应商管理API;2)Actix-web实现视频管理系统和图书管理系统的完整案例;3)Rocket框架的快速开发体验;4)MySQL/PostgreSQL/MongoDB数据库集成方案;5)Tokio异步编程示例。文章通过具体代码展示了Rust在Web开发中的核心功能实现,包括路由配置、CRUD操作、表单处理、文件上传和地理空间查询等,为开发者提供了实用的技术 阅读详情

Rust 学习笔记:关于共享状态并发的练习题

Rust 学习笔记:关于共享状态并发的练习题

参考视频:

  1. https://www.bilibili.com/video/BV15ZovYgE1r

问题一

在某些并发 API 中,互斥锁和它保护的数据是分开的。

例如:

    let mut data = Vec::new();
    let mx: Mutex = Mutex::new();
    {
        let _guard = mx.lock();
        data.push(1);
    }

以下哪一项最好地描述了为什么 Rust 使用 Mutex<T> 而不仅仅是 Mutex?

A. 提高使用互斥锁的并发程序的效率
B. 防止互斥锁的数据在线程之间移动
C. 防止在不锁定互斥锁的前提下访问互斥锁的数据
D. 减少对互斥锁方法的调用

答:C。

问题二

以下程序能否通过编译?若能,输出是?

use std::sync::Arc;
use std::thread;

fn main() {
    let s = String::from("Hello world");
    let a = Arc::new(&s);
    let a2 = Arc::clone(&a);
    let t =  thread::spawn(move || a2.len());
    let len =  t.join().unwrap();
    println!("{} {}", a, len);
}

答:不能通过编译。

在这里插入图片描述

Arc<T> 得到的 s 的引用,而 Arc<T> 被使用在子线程 t。假如子线程的生命周期比主线程更长,这就会导致主线程执行完成后 s 被释放,而子线程仍然引用。Rust 编译器发现了这个可能的悬垂风险。

新手必看:电路设计里的‘地’到底怎么接?单点、多点、混合接地保姆级图解 本文深入解析电路设计中的接地技术,涵盖单点、多点和混合接地的原理与应用。通过详细的图解和实战案例,帮助新手理解接地在提供参考电位、构成电流回路及抑制电磁干扰中的关键作用,避免常见设计误区,提升电路稳定性与抗干扰能力。 阅读详情

相关推荐

HarmonyOS开发第一步:Dev Eco Studio4.0保姆级安装配置指南(含Node.js环境)

本文提供HarmonyOS开发环境搭建的保姆级教程,重点详解Dev Eco Studio 4.0的安装与配置,并攻克Node.js环境与Ohpm包管理器的关键设置难点。通过清晰的步骤指引,帮助开发者从零开始,高效完成开发环境部署,顺利迈出鸿蒙应用开发的第一步。

lake5的博客 569

Rust 学习笔记:共享状态并发

Rust 学习笔记:共享状态并发

ProgramNovice的博客 1058

从CST到AD:高效PCB阵列设计与介质优化实战

本文详细解析了从CST电磁仿真软件到Altium Designer(AD)的PCB阵列设计全流程,重点解决毫米波天线等精密设计中模型导出、介质优化和阵列构建的核心难题。通过实战技巧,指导工程师高效处理DXF文件导入、复杂铜皮填充、空气介质实现等关键步骤,确保高精度设计从仿真到制造的顺利转换,提升工作效率与设计可靠性。

weixin_28256233的博客 439

Rust 学习笔记:实现状态模式

Rust 学习笔记:实现状态模式

ProgramNovice的博客 1361

ESP32之 ESP-IDF + Clion 开发环境搭建(二)—— Linux版

本文介绍了 Linux 下,使用Clion IDE 用官方 ESP-IDF 开发包进行 ESP32 开发的环境搭建

Augtons 的博客 6097

【FF-A】第二章 Introduction

Armv8.4 架构引入了在安全状态下的虚拟化扩展。Arm® SMMU v3.2 架构[1]为安全流添加了对第2阶段翻译的支持,以补充在 Armv8.4 处理器状态下的安全 EL2 翻译制度。这些架构特性使得在安全状态下,彼此不信任的软件组件能够相互隔离。关于在安全状态下引入虚拟化扩展以及固件框架目标的更多理念可在名为《在安全世界使用虚拟化进行隔离》的白皮书[3]中找到。软件组件只能访问物理地址空间和系统资源的区域,例如 GIC 中对其正确运行必要的中断。

baron-周贺贺-代码改变世界ctw 528

Rust学习笔记(下)

笔记的内容主要参考与《Rust 程序设计语言》,一些也参考了《通过例子学 Rust》和《Rust语言圣经》。Rust学习笔记分为上中下,其它两个地址在Rust学习笔记(上)和Rust学习笔记(中)。

Fishermen_sail的博客 1416

龙虾机器人(OpenClaw)本地部署完全技术指南

在开始部署之前,我们需要明确部署的对象。通常所说的“龙虾机器人”指的是开源项目 OpenClaw(曾用名:Clawdbot、Moltbot)。它由程序员彼得·斯坦伯格开发,是一个开源的、可本地部署的通用型AI代理系统。与ChatGPT等对话式AI不同,OpenClaw被赋予了操作系统的权限:它可以执行终端命令、读写文件、操控浏览器、安装软件,甚至通过MCP协议调用外部工具。

huanghm88的专栏 2万+

Rust学习笔记_04——引用

在Rust中,当数据的生命周期结束时,它的内存会被自动释放。例如,如果一个函数返回了一个指向局部变量的引用,而该局部变量在函数返回后已经被销毁,那么返回的引用就是一个悬挂引用。悬挂引用(Dangling Reference)在Rust中是一个严重的内存错误,它指的是一个引用指向了一个已经被释放的内存位置。在Rust中,引用是处理借用操作的关键机制,它通过一系列的规则来保证内存安全和避免数据竞争。悬挂引用是内存安全问题的一种表现,它可能导致程序在运行时访问无效的内存地址,从而引发各种不可预测的行为。

LuckyLay的博客 1830

YOLOv11改进 | 特殊场景改进篇 | 2024最新改进CPA-Enhancer链式思考网络(适用低照度、图像去雾、雨天、雪天)

本文给大家带来的改进机制是2024.3月份最新改进,由CPA-Enhancer: Chain-of-Thought Prompted Adaptive Enhancer for Object Detection under Unknown Degradations论文提出的CPA-Enhancer链式思考网络CPA-Enhancer通过引入链式思考提示机制,实现了对未知退化条件下图像的自适应增强。该方法的核心在于能够利用CoT提示对图像退化进行动态分析和适应,从而显著提升物体检测性能。

Snu77的博客 2013

【华为OD】华为性格测试(综合测试)高分策略

1、性格测试非常重要,是一次否决制,18 个月有效期,所以态度一定要认真对待,不要随便乱选;2、做题原则:正向原则,积极乐观向上3、时间为 25-30 分钟,会频繁出现重复选项重复出现的题目注意一致性。

笑着的程序员的博客 3万+

深入并发编程:从 C++ 到 Rust 的学习笔记

多线程同时读写同一个变量会导致“数据竞争(Data Race)”,引发程序崩溃或结果错乱。今天重点攻克了两句让人懵逼的 Rust 并发代码,它们完美体现了 Rust 的严谨。:批处理是自动处理海量数据的任务模式。这是 Rust 中最爽的批处理优化。把庞大的数组切块,丢给不同线程处理。条件不满足就挂起休眠(不占 CPU),条件满足了由别人唤醒。:让每个子线程计算局部结果,最后由主线程汇总。:线程需要等待某个条件(如:有资源了)。:在批处理计算(如大范围求和)时,死循环会把 CPU 烧爆。

2401_88363404的博客 433

PyQt5开发应聘简历模版

该工具旨在帮助用户对Excel、CSV格式的数据进行快速导入、分析及可视化展示,支持折线图、柱状图、饼图等多种图表类型,提供数据筛选、排序、统计等功能,适用于企业数据分析人员日常工作。:一款用于本地文件管理的桌面应用,支持文件的新建、复制、移动、删除、重命名等基本操作,具备文件搜索、分类整理、批量操作及文件信息查看等功能,提升用户文件管理效率。:熟悉QSS(Qt Style Sheet)样式表,可对PyQt5界面进行个性化美化,包括控件颜色、字体、边框、布局等样式定制,提升应用视觉体验。

ybmzlqzj的博客 83

Rust学习笔记_15——Union

是一种特殊的数据结构,允许你在同一个内存位置存储不同类型的值。中,所有的字段共享同一块内存,这意味着在任何给定时间,)有些相似,但有一个关键的不同点:在。只能安全地包含一个有效的值。在Rust编程语言中,

LuckyLay的博客 1303

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Rust多线程编程学习笔记

本文介绍了Rust语言中的多线程编程基础和实践方法。主要内容包括:同步线程编程(线程创建、通信、共享状态、返回值和线程池)、异步线程编程(Tokio运行时、异步任务和通道)、线程安全机制(所有权、同步原语、Send/Sync trait)以及性能优化技巧。Rust通过独特的所有权系统和类型系统保障线程安全,避免数据竞争问题。文章提供了详细的代码示例,展示如何实现线程间通信、状态共享和任务处理,并比较了同步与异步编程的特点和适用场景,为开发者提供了Rust多线程编程的全面指导。

lanzh_syf的博客 712

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

rust基础

rust基础学习笔记

fengxiandada的博客 1932

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Rust8.2 Fearless Concurrency 无畏并发

Rust编程语言入门教程课程笔记 Lecture 16: Fearless Concurrency

Simba的博客 479

rust学习链接

序号 链接 00 rust学习02安装 01 rust学习01附录 02 rust学习04变量 03 rust学习03猜游戏 04 rust学习06所有权上 05 rust学习06所有权上 06 rust学习05函数 07 rust学习08结构示例与09方法 08 c++增强c类接口安全性与rust学习07切片 09 rust学习11匹配与c++部分头. 10 rust学习10枚举 11 rust学习13用与14前部分 12 rust学习12包...

个人进步之路 557

鸿蒙开发仓颉语言:并发机制的设计与实现

细粒度并发算法是相对于粗粒度算法而言的,粗粒度并发往往指使用并发度较低的方法实现对并发对象的访问,例如:使用一个锁对象控制所有线程对某一并发对象的操作,这种方式简单,但性能很差,任意时刻只允许一个线程操作并发并发,即:一个线程持有锁并操作并发对象时,其它线程会因为无法持有锁而被阻塞。例如,在示例代码 1 中,各线程最终将结果汇入并发哈希表 resultMap 中,注意到在插入结果时线程不需要通过额外的互斥锁保证正确性,因为并发哈希表内部已确保并发访问的正确性。而在它的视角中,仓颉线程被视为可执行任务。

adaedwa187545的博客 756

rust语言AI编程学习笔记(一)Tokio库(异步编程)

Tokio 是 Rust 的异步运行时,专为 IO 密集型任务设计。其核心采用反应器-执行器模型,通过轻量级任务实现高并发。主要特性包括:1) #[tokio::main]宏作为入口,支持多线程或单线程模式;2) tokio::spawn创建并发任务;3) join!并行等待多个任务;4) select!选择最先完成的任务;5) JoinSet管理动态任务组。共享状态通过异步锁(Mutex/RwLock)实现线程安全。Tokio 优势在于高效利用系统资源,特别适合网络服务等场景,但对纯CPU计算任务建议使用

咸甜适中 437

corutine rust_Rust学习笔记#5:函数和trait

函数基本语法Rust的函数使用fn关键字开头,函数可以有一系列的输入参数,还有一个返回类型。函数返回可以使用return语句,可以使用表达式。下面是一个标准函数的示例,add函数接受两个i32的参数,然后计算它们的和并返回:fn add(a: i32, b: i32) -> i32 {a + b}println!("{}", add(1, 2)); // 输出:3函数返回值如果不显示标明,...

weixin_39998462的博客 455

Rust 学习笔记 - 面向对象,java分布式开发面试题

Rust 避免将 struct 或 enum 称为对象,因为它们与 impl 块是分开的。trait 对象有些类似于其它语言中的对象,因为它们在某种程度上组合了数据与行为。trait 对象与传统对象又有不同的地方:无法为 trait 对象添加数据。trait 对象被专门用于抽象某些共有行为,它没有其它语言中的对象那么通用。下面来实现一下这个 GUI 工具:// lib.rs// 绘制一个按钮// main.rs// adder 是 crate 的名称// 绘制一个选择框。

2401_84411849的博客 1039

Rust 从“能跑”到“跑得对”:所有权、异步与工程化的双项目实战复盘(含压测与发布清单)

三个工程承诺:高性能(零成本抽象)、内存安全(编译期保证)、并发安全(无数据竞争)。度量视角延迟分布看 P50/P90/P99,而非平均值;资源曲线看吞吐/CPU/内存/FD 随负载变化的斜率;可观测性看结构化日志密度、Trace 覆盖率、指标可回归性。与传统栈差异:Rust 在“高吞吐 + 低延迟 + 可控内存 + 无 GC 抖动”的场景里让“正确性与性能兼得”,更适合边缘节点/高并发服务/系统工具/嵌入式。Rust 不是“银弹”,但它给了我们一种工程秩序。

2501_92698736的博客 990

Monoio:基于 io-uring 的高性能 Rust Runtime(1)

但是开发这类组件对开发者的专业水平有较高的要求,编程范式上对开发者心智负担巨大,稍有不慎就会造成非预期的后果。举例来说,在 C++ 中要完成一次异步的网络请求,需要将整个流程按照异步点拆分成独立的纯同步函数,并以 callback 的形式将其串联——这一来大大降低了其可读性,二来状态转换和管理容易出错;并且对变量生命周期需要精细管理,否则就会出现悬垂指针等内存问题。为什么不试试神奇的 Rust 呢?Rust 语言通过引入所有权模型,在不引入垃圾回收的情况下保证了内存安全;

2401_84874454的博客 438

Monoio:基于 io-uring 的高性能 Rust Runtime

过去,高性能网络中间件或服务器往往使用 C/C++ 编写,比如我们常见的 Envoy 和 Nginx。它们往往以非常直接的方式和操作系统交互,并且得益于没有垃圾收集机制,相比有 GC 的语言(如 Golang 和 Java),额外开销十分低,延迟稳定。但是开发这类组件对开发者的专业水平有较高的要求,编程范式上对开发者心智负担巨大,稍有不慎就会造成非预期的后果。举例来说,在 C++ 中要完成一次异步的网络请求,需要将整个流程按照异步点拆分成独立的纯同步函数,并以 callback 的形式将其串联——这一来大大

2301_82241819的博客 473
上一篇: Rust 学习笔记:共享状态并发
下一篇: Rust 学习笔记:通过 Send 和 Sync trait 实现可扩展并发性
UestcXiye
博客等级 码龄8年 9028粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值