MST

星途 面试题库

面试题:Rust中如何确保统计功能原子实现的基本准确性

在Rust中,假设要实现一个简单的计数器统计功能,要求具备原子性以确保在多线程环境下数据准确性。请阐述基本的实现思路,并给出关键代码片段。
27.5万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 使用 std::sync::atomic::AtomicUsize 类型来存储计数器的值,因为 AtomicUsize 提供了原子操作,能在多线程环境下安全地修改和读取。
  2. 提供方法来增加、减少和获取计数器的值,这些方法要使用 AtomicUsize 提供的原子操作方法。
  3. 在多线程环境下,每个线程通过这些方法来操作计数器,从而保证数据的准确性。

关键代码片段

use std::sync::atomic::{AtomicUsize, Ordering};
use std::thread;

struct Counter {
    value: AtomicUsize,
}

impl Counter {
    fn new() -> Self {
        Counter {
            value: AtomicUsize::new(0),
        }
    }

    fn increment(&self) {
        self.value.fetch_add(1, Ordering::SeqCst);
    }

    fn decrement(&self) {
        self.value.fetch_sub(1, Ordering::SeqCst);
    }

    fn get(&self) -> usize {
        self.value.load(Ordering::SeqCst)
    }
}

fn main() {
    let counter = Counter::new();
    let mut handles = vec![];

    for _ in 0..10 {
        let counter_clone = counter.clone();
        let handle = thread::spawn(move || {
            counter_clone.increment();
        });
        handles.push(handle);
    }

    for handle in handles {
        handle.join().unwrap();
    }

    println!("Final counter value: {}", counter.get());
}