#atomic #helper #atom #generic #enums #atomig #atomic-t

atomig-macro

atomig的辅助crate。请勿直接使用,而应通过主crate使用。此辅助工具不遵循语义版本控制!

3个版本 (破坏性)

0.3.0 2022年4月9日
0.2.0 2020年7月30日
0.1.0 2019年7月24日

#51 in #atom

Download history 1194/week @ 2024-04-02 1312/week @ 2024-04-09 1579/week @ 2024-04-16 1461/week @ 2024-04-23 1510/week @ 2024-04-30 1356/week @ 2024-05-07 1643/week @ 2024-05-14 1517/week @ 2024-05-21 1335/week @ 2024-05-28 1084/week @ 2024-06-04 1599/week @ 2024-06-11 1880/week @ 2024-06-18 1961/week @ 2024-06-25 1115/week @ 2024-07-02 1461/week @ 2024-07-09 986/week @ 2024-07-16

5,879 每月下载量
5个crate中使用了(通过atomig

MIT/Apache

10KB
182

Atomig:通用且方便的std原子操作

CI status of master Crates.io Version docs.rs

提供可使用原始和自定义类型的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);

这几乎适用于所有原始类型,包括f32f64char,但也适用于像std::ptr::NonNullstd::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.0MIT许可证的许可。除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交给本项目包括在内的任何贡献,将按照上述方式双许可,无需额外条款或条件。

依赖关系

~1.5MB
~35K SLoC