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

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

  • [Rust 学习笔记:关于共享状态并发的练习题](#Rust 学习笔记:关于共享状态并发的练习题)

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

参考视频:

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

问题一

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

例如:

rust 复制代码
    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。

问题二

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

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

相关推荐
a cool fish(无名)1 小时前
rust-方法语法
开发语言·后端·rust
a cool fish(无名)17 小时前
rust-参考与借用
java·前端·rust
叶 落20 小时前
[Rust 基础课程]猜数字游戏-获取用户输入并打印
rust·rust基础
RustFS1 天前
RustFS 如何修改默认密码?
rust
景天科技苑1 天前
【Rust线程池】如何构建Rust线程池、Rayon线程池用法详细解析
开发语言·后端·rust·线程池·rayon·rust线程池·rayon线程池
该用户已不存在2 天前
Zig想要取代Go和Rust,它有资格吗
前端·后端·rust
用户1774125612442 天前
不懂装懂的AI,折了程序员的阳寿
rust
量子位3 天前
vivo自研蓝河操作系统内核开源!Rust开发新机遇来了
rust·ai编程
祈澈菇凉3 天前
rust嵌入式开发零基础入门教程(六)
stm32·单片机·rust
祈澈菇凉3 天前
rust嵌入式开发零基础入门教程(二)
开发语言·后端·rust