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

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

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

  • 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 编译器发现了这个可能的悬垂风险。

相关文章:

  • UNECE R152——解读自动驾驶相关标准法规(AEB)
  • 【向量库】Weaviate概述与架构解析
  • 0day同步!昇思MindSpore框架成功适配面壁MiniCPM4.0模型并上线魔乐社区
  • 树莓派4B, ubuntu20.04, 安装Ros Noetic[踩坑记录]
  • 云原生K8s+Docker+KubeSphere+DevOps
  • K8S认证|CKS题库+答案| 10. Trivy 扫描镜像安全漏洞
  • 数据可视化交互
  • go 里面的指针
  • 盲盒一番赏小程序:引领盲盒新潮流
  • Appuploader:在WindowsLinux上完成iOS APP上架的一种解决方案
  • LeetCode 高频 SQL 50 题(基础版)之 【高级字符串函数 / 正则表达式 / 子句】· 下
  • 手机平板能效生态设计指令EU 2023/1670标准解读
  • 打开网页即可远程控制手机,Linux系统亦可使用
  • 2025盘古石杯决赛【手机取证】
  • Polarr:手机修图,专业与创意并存
  • 从物理机到云原生:全面解析计算虚拟化技术的演进与应用
  • 打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
  • 什么是TRS收益互换?金融创新架构下的交易系统开发与实践
  • 【Mini-F5265-OB开发板试用测评】1、串口printf输出
  • TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
  • 常州平台网站建设/seo优化搜索推广
  • 挂号网站建设/西安seo优化公司
  • 洛阳网站建设汉狮报价/云南网站建设百度
  • iis 网站无法访问/电脑培训网上免费课程
  • 定制网站和模板建站哪个更好/windows优化大师怎么卸载
  • 海外独立站平台/企业门户网站的设计与实现