为什么AtomicUsize没有实现发送?

J. *_*nne 5 rust

std::sync::atomic::AtomicUsize实现Sync,这意味着当多个线程之间共享时,不可变引用没有数据争用.为什么不AtomicUsize实施Send?是否存在与创建原子的线程链接的状态,或者这是与原子意图使用的方式有关的语言设计决策,即通过Arc<_>等等.

She*_*ter 4

这是一个诡计!AtomicUsize 确实实施Send

use std::sync::atomic::AtomicUsize;

fn checker<T>(_: T) where T: Send {}

fn main() {
    checker(AtomicUsize::default());
}
Run Code Online (Sandbox Code Playgroud)

事实上,甚至有一个自动化测试可以确保情况确实如此

生锈 1.26

由于对 rustdoc 所做的更改,这些自动特征现已记录在案

之前的版本

问题在于如何Send实现:

当编译器确定它合适时,会自动派生此特征。

这意味着 Rustdoc 不知道它Send是为类型实现的,因为大多数类型没有显式实现它。

这解释了为什么AtomicPtr<T>出现在实现者列表中:它有一个特殊的实现,忽略T.