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