3个版本 (破坏性)
0.3.0 | 2022年4月9日 |
---|---|
0.2.0 | 2020年7月30日 |
0.1.0 | 2019年7月24日 |
#51 in #atom
5,879 每月下载量
在5个crate中使用了(通过atomig)
10KB
182 行
Atomig:通用且方便的std
原子操作
提供可使用原始和自定义类型的Atomic<T>
。但是,它仅适用于实际上可以使用原子操作的类型:其他类型不使用基于锁的回退!此crate基于std
的原子操作,因此不包含任何unsafe
代码!默认情况下,此crate没有依赖。如果您启用serde
功能,则此crate将依赖于serde
,并在适当的时候为Atomic<T>
实现Serialize
/ Deserialize
,使用顺序一致性排序。
原始类型示例
use atomig::{Atomic, Ordering};
let x = Atomic::new(27); // `Atomic<i32>`
x.store(39, Ordering::SeqCst);
这几乎适用于所有原始类型,包括f32
、f64
和char
,但也适用于像std::ptr::NonNull
和std::num::NonZero
这样的类型。
您可以为您的枚举或结构体类型自动派生Atom
,以便在Atomic<T>
中使用。但是,有一些限制。
// Requires the 'derive' feature:
// atomig = { version = "_", features = ["derive"] }
use atomig::{Atom, Atomic, Ordering};
#[derive(Atom)]
#[repr(u8)]
enum Animal { Dog, Cat, Fox }
let animal = Atomic::new(Animal::Cat);
animal.store(Animal::Fox, Ordering::SeqCst);
#[derive(Atom)]
struct Port(u16);
let port = Atomic::new(Port(80));
port.store(Port(8080), Ordering::SeqCst);
有关更多示例和信息,请参阅文档。
许可证
根据您的选择,本软件受Apache License, Version 2.0或MIT许可证的许可。除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交给本项目包括在内的任何贡献,将按照上述方式双许可,无需额外条款或条件。
依赖关系
~1.5MB
~35K SLoC