#atomic #generic #atom #order #cas

no-std atomig

通过 stdAtomic<T> 提供泛型、方便且无锁的原子操作。可用于许多原始类型(包括浮点数)和自定义类型。

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并发

Download history 2979/week @ 2024-03-14 3207/week @ 2024-03-21 1497/week @ 2024-03-28 1198/week @ 2024-04-04 1602/week @ 2024-04-11 1971/week @ 2024-04-18 839/week @ 2024-04-25 1832/week @ 2024-05-02 1227/week @ 2024-05-09 1680/week @ 2024-05-16 1737/week @ 2024-05-23 1030/week @ 2024-05-30 1139/week @ 2024-06-06 1209/week @ 2024-06-13 2091/week @ 2024-06-20 1848/week @ 2024-06-27

6,476 每月下载量
3 个 Crates 中使用(通过 cargo-limit

MIT/Apache

68KB
827

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许可证定义,您有意提交的任何贡献,只要被包含在此项目中,都将按照上述方式双重许可,不附加任何额外条款或条件。

依赖项

~0–275KB