8 个版本
0.4.1 | 2024年3月4日 |
---|---|
0.4.0 | 2022年4月9日 |
0.3.3 | 2021年12月30日 |
0.3.2 | 2021年10月2日 |
0.1.0 | 2019年7月24日 |
#69 在 并发
6,476 每月下载量
在 3 个 Crates 中使用(通过 cargo-limit)
68KB
827 行
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许可证定义,您有意提交的任何贡献,只要被包含在此项目中,都将按照上述方式双重许可,不附加任何额外条款或条件。
依赖项
~0–275KB