gpt4 book ai didi

rust - 为什么许多原始类型都有一个 `Atomic*` 类型而不是通用的 `Atomic` 类型?

转载 作者:行者123 更新时间:2023-11-29 07:43:17 24 4
gpt4 key购买 nike

查看the std::sync::atomic module , 可以看到一堆不同的 Atomic*类型,例如 AtomicU32 , AtomicI16和更多。这是为什么?

Rust 有泛型,而且——正如我所见——可以添加一个泛型 Atomic<T>其中 T受模块中定义的某些特征的限制(Java 式命名:Atomicable)。该特征将由可以以原子方式处理的类型实现,用户可以只使用 Atomic<u32>。而不是 AtomicU32 .

为什么没有通用的 Atomic<T> ?为什么要有一堆不同的类型呢?

最佳答案

拥有 AtomicU8 的目的(例如)正在使用底层硬件执行 atomic instructions ,例如在 x86 上 CMPXCHG instruction .

原文RFC #1505建议 Atomic<T>类型。 One of the main concern was ,人们会使用 T以一种意想不到的方式,例如使用 Atomic<[u8; 32]>这不可能支持,因为缺乏支持这些的硬件。
使用 Mutex 的回退/解决方法被提议了,但感觉就像作弊,因为编译器对不同的 T 会有不同的行为。

It was finally closed赞成RFC #1543它引入了我们今天所知的原子 {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")] 等等。

关于rust - 为什么许多原始类型都有一个 `Atomic*` 类型而不是通用的 `Atomic<T>` 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57075531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com