为什么AtomicUsize没有实现发送?

时间:2016-05-05 23:17:11

标签: rust

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

1 个答案:

答案 0 :(得分:4)

这是一招! AtomicUsize 实施Send

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

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

fn main() {
    checker(AtomicUsize::default());
}

事实上,甚至还有automated test that ensures this is the case

Rust 1.26

These auto traits are now documented,感谢change made to rustdoc

以前的版本

问题在于Send的实施方式:

  

当编译器确定它是合适的时,会自动导出该特征。

这意味着Rustdoc不知道Send是针对某个类型实现的,因为大多数类型都没有明确地实现它。

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