面试题答案
一键面试策略一:批量更新
在可能的情况下,尽量批量更新原子计数器,减少原子操作的次数。因为原子操作通常比普通操作更昂贵,减少操作次数能提升性能。
示例代码:
use std::sync::atomic::{AtomicUsize, Ordering};
fn main() {
let counter = AtomicUsize::new(0);
let batch_size = 100;
for _ in 0..batch_size {
counter.fetch_add(1, Ordering::SeqCst);
}
let result = counter.load(Ordering::SeqCst);
println!("Counter value: {}", result);
}
策略二:使用合适的内存序
根据实际需求选择合适的内存序。例如,如果不需要顺序一致性(Ordering::SeqCst
)这种最强的内存序保证,可以选择较弱的内存序,如Ordering::Relaxed
,以减少同步开销。但要注意,使用较弱的内存序可能会影响程序在多线程环境下的正确性,需谨慎使用。
示例代码:
use std::sync::atomic::{AtomicUsize, Ordering};
fn main() {
let counter = AtomicUsize::new(0);
counter.fetch_add(1, Ordering::Relaxed);
let result = counter.load(Ordering::Relaxed);
println!("Counter value: {}", result);
}