Rust 为什么原子化不实现发送?

Rust 为什么原子化不实现发送?,rust,Rust,std::sync::atomic::AtomicUsize实现了sync,这意味着当在多个线程之间共享时,不可变引用不存在数据争用。为什么AtomicUsize不实现Send?是否存在与创建原子的线程相关的状态,或者这是与原子的使用方式相关的语言设计决策,即通过Arc等。这是一个技巧原子化是否实现了发送: use std::sync::atomic::AtomicUsize; fn checker<T>(_: T) where T: Send {} fn main() {

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

这是一个技巧<代码>原子化是否实现了
发送

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

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

fn main() {
    checker(AtomicUsize::default());
}
使用std::sync::atomic::AtomicUsize;
fn checker(u:T)其中T:Send{}
fn main(){
检查器(AtomicUsize::default());
}
事实上,甚至还有一个

锈1.26 ,多亏了一位朋友

以前的版本 问题在于如何实现
Send

当编译器确定此特性是适当的时,会自动派生此特性

这意味着Rustdoc不知道为某个类型实现了
Send
,因为大多数类型都没有显式实现它

这就解释了为什么
AtomicPtr
会出现在implementers列表中:它有一个忽略
T
类型的特殊实现