MST

星途 面试题库

面试题:Rust 中原子类型实现停止标志的基础方法

在 Rust 中,如何使用原子类型来实现一个简单的停止标志?请给出核心代码片段,并简要解释原子类型在此场景下相较于普通类型的优势。
20.5万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

核心代码片段

use std::sync::atomic::{AtomicBool, Ordering};

fn main() {
    let stop_flag = AtomicBool::new(false);

    // 启动一个线程来模拟一些工作
    let handle = std::thread::spawn(move || {
        while!stop_flag.load(Ordering::SeqCst) {
            // 模拟工作
            println!("Working...");
            std::thread::sleep(std::time::Duration::from_secs(1));
        }
        println!("Stopping...");
    });

    // 主线程等待一段时间后设置停止标志
    std::thread::sleep(std::time::Duration::from_secs(5));
    stop_flag.store(true, Ordering::SeqCst);

    // 等待线程结束
    handle.join().unwrap();
}

原子类型优势

  1. 线程安全:普通类型在多线程环境下读写可能会导致数据竞争,而原子类型提供了原子操作,确保在多线程环境下数据的一致性和安全性。例如上述代码中多个线程可以安全地读写 stop_flag 而不会出现数据竞争问题。
  2. 避免锁开销:与使用锁来保护共享数据相比,原子类型的操作通常更加轻量级。原子类型的操作是直接在硬件层面提供原子性保证,不需要像锁那样进行复杂的上下文切换和同步操作,从而提高了性能。