综观该std::sync::atomic模块,可以看到很多不同的Atomic*类型,如AtomicU32,AtomicI16和更多。这是为什么?
锈病泛型和-在我看来-这将是可能增加一个通用的Atomic<T>,其中T由模块中定义的一些特质界(在Java中上下的命名:Atomicable)。该特征将通过可以以原子方式处理的类型来实现,并且用户可以使用Atomic<u32>而不是AtomicU32。
为什么没有通用名称Atomic<T>?为什么会有许多不同的类型呢?
hel*_*low 11
拥有AtomicU8(例如)目的是使用底层硬件来执行原子指令,例如在x86上执行CMPXCHG指令。
原始RFC#1505建议使用一种Atomic<T>类型。一个主要的关注点是,人们会T以一种意想不到的方式使用,例如Atomic<[u8; 32]>,由于缺乏支持这些功能的硬件,因此无法使用。提出
了使用a的后备/解决方法Mutex,但感觉就像作弊一样,因为编译器对于不同的Ts 会有不同的表现。
最终以RFC#1543结束,该协议引入了我们今天所知道的Atomic {I,U} {8,16,32,64}类型。
然后在PR#33048中实现,并在PR#56753(Rust 1.34.0)中得到稳定。
为了确保底层硬件确实支持原子操作,这些类型具有cfg属性,例如,AtomicI8为#[cfg(target_has_atomic = "8")],因为AtomicI16为#[cfg(target_has_atomic = "16")]etcetera。
| 归档时间: |
|
| 查看次数: |
199 次 |
| 最近记录: |