MST

星途 面试题库

面试题:Rust中读写锁的基本读写规则应用

在Rust中,假设有一个结构体`Data`,里面包含一些数据。现在使用`std::sync::RwLock`来保护这个`Data`结构体。请编写一段代码,创建多个线程,其中一些线程读取`Data`中的数据,另一些线程修改`Data`中的数据,同时要遵循Rust读写锁的读写规则,保证数据的一致性和线程安全。
14.3万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
use std::sync::{Arc, RwLock};
use std::thread;

// 定义Data结构体
struct Data {
    value: i32,
}

fn main() {
    // 使用Arc和RwLock来保护Data
    let data = Arc::new(RwLock::new(Data { value: 0 }));

    let mut read_handles = vec![];
    let mut write_handles = vec![];

    // 创建3个读线程
    for _ in 0..3 {
        let data_clone = Arc::clone(&data);
        let handle = thread::spawn(move || {
            let data = data_clone.read().unwrap();
            println!("Read data: {}", data.value);
        });
        read_handles.push(handle);
    }

    // 创建2个写线程
    for i in 0..2 {
        let data_clone = Arc::clone(&data);
        let handle = thread::spawn(move || {
            let mut data = data_clone.write().unwrap();
            data.value += i;
            println!("Write data: {}", data.value);
        });
        write_handles.push(handle);
    }

    // 等待所有读线程结束
    for handle in read_handles {
        handle.join().unwrap();
    }

    // 等待所有写线程结束
    for handle in write_handles {
        handle.join().unwrap();
    }
}