面试题答案
一键面试- 主要原子类型:
- 在Rust中,通常会使用
std::sync::atomic::AtomicUsize
(如果ID是无符号整数类型)来实现原子操作。它提供了线程安全的原子读 - 修改 - 写操作。
- 在Rust中,通常会使用
- 基本操作步骤:
- 初始化:
use std::sync::atomic::{AtomicUsize, Ordering}; let id_counter = AtomicUsize::new(0);
- 分配ID:
可以使用
fetch_add
方法来原子地增加计数器的值并返回旧值。旧值即为分配的ID。
这里let new_id = id_counter.fetch_add(1, Ordering::SeqCst);
Ordering::SeqCst
表示顺序一致性内存序,它提供了最强的内存一致性保证,确保在多线程环境下操作的正确性。在性能要求更高且对内存序要求不那么严格的场景下,可以使用Ordering::Relaxed
等较弱的内存序,但需谨慎,因为可能导致数据竞争等问题。 - 读取当前ID值(可选):
如果需要获取当前计数器的值(不一定是新分配的ID),可以使用
load
方法。let current_value = id_counter.load(Ordering::SeqCst);
- 初始化:
通过上述步骤,利用AtomicUsize
的原子操作,就可以实现一个简单的ID分配策略。