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

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

http://www.xdnf.cn/news/13287.html

相关文章:

  • 多模态大语言模型arxiv论文略读(112)
  • 13.10 LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析
  • 在软件开发中正确使用MySQL日期时间类型的深度解析
  • 什么是知识产权管理系统?知识产权管理系统有哪些功能?
  • 公司内网OA办公系统(本地服务器没有公网IP)如何实现异地外网访问?
  • MySQL数据库基础(三)———数据行操作
  • 本地项目push到git
  • 深度学习在微纳光子学中的应用
  • 6个月Python学习计划 Day 18 - 项目实战 · 学生成绩管理系统(OOP版)
  • Linux——I/O复用函数
  • 245. 2019年蓝桥杯国赛 - 数正方形(困难)- 递推
  • RocketMQ基础命令
  • 【Linux】使用1Panel 面板让服务器定时自动执行任务
  • 小木的算法日记-二叉堆
  • 代码随想录算法训练营第60期第六十二天打卡
  • 全面掌握Pandas时间序列处理:从基础到实战
  • 多面体模型-学习笔记2
  • 管理学院权限管理系统开发总结
  • Blazor-Ant Design of Blazor快速开始
  • 蓝桥杯 回文日期
  • uniapp 字符包含的相关方法
  • RAG 文档解析难点1:多栏布局的 PDF 如何解析
  • 【渲染】Unity-分析URP的延迟渲染-DeferredShading
  • ZeenWoman 公司数据结构文档
  • window 显示驱动开发-如何查询视频处理功能(三)
  • Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程
  • 算法岗面试经验分享-大模型篇
  • MODBUS TCP转CANopen 技术赋能高效协同作业
  • 华为网路设备学习-24(路由器OSPF - 特性专题)
  • Linux文件管理和输入输出重定向