MST

星途 面试题库

面试题:Rust中顺序一致性顺序在多线程场景下的应用

在Rust多线程编程中,假设有两个线程,线程A对共享变量x进行赋值操作,线程B读取变量x的值。请描述如何通过Rust的顺序一致性顺序保证线程B能读取到线程A正确赋值后的值,并给出相应代码示例。
27.3万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. 使用ArcMutex实现
    • 在Rust中,可以使用Arc(原子引用计数)和Mutex(互斥锁)来保证顺序一致性。Mutex提供了一种机制,使得在同一时间只有一个线程可以访问共享资源。
    • 代码示例:
use std::sync::{Arc, Mutex};
use std::thread;

fn main() {
    let shared_data = Arc::new(Mutex::new(0));
    let shared_data_clone = shared_data.clone();

    let thread_a = thread::spawn(move || {
        let mut data = shared_data_clone.lock().unwrap();
        *data = 42;
    });

    let thread_b = thread::spawn(move || {
        let data = shared_data.lock().unwrap();
        println!("Thread B reads: {}", *data);
    });

    thread_a.join().unwrap();
    thread_b.join().unwrap();
}
  1. 解释
    • 首先创建了一个Arc<Mutex<i32>>类型的共享变量shared_data,初始值为0。
    • thread_a线程获取Mutex的锁(lock方法),然后对共享变量进行赋值操作。
    • thread_b线程同样获取Mutex的锁,然后读取共享变量的值并打印。
    • 由于Mutex的互斥特性,thread_a对变量的赋值操作一定在thread_b读取操作之前完成,从而保证了顺序一致性,使得thread_b能读取到thread_a正确赋值后的值。