MST
星途 面试题库

面试题:Rust中happens - before关系的基础判断

假设有如下Rust代码片段: ```rust use std::sync::{Arc, Mutex}; let data = Arc::new(Mutex::new(0)); let data_clone = data.clone(); std::thread::spawn(move || { let mut value = data_clone.lock().unwrap(); *value += 1; }); let mut result = data.lock().unwrap(); println!("{}", *result); ``` 请分析这段代码中存在哪些可能的happens - before关系,并说明判断依据。
21.9万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. data_clonelock操作happens - before datalock操作
    • 判断依据:在创建新线程时,data_clonemove到新线程中,新线程先获取data_clone的锁并对其内部值进行修改。之后主线程获取data的锁。由于新线程的创建和执行先于主线程中datalock操作,所以data_clonelock操作happens - before datalock操作。
  2. *value += 1的修改操作happens - before println!("{}", *result)的读取操作
    • 判断依据*value += 1Mutex保护的值进行修改,之后主线程通过data获取锁并读取这个值用于打印。由于对共享数据的修改操作在时间上先于读取操作,所以*value += 1的修改操作happens - before println!("{}", *result)的读取操作。