#atomic #traits #order #operations #sync #fetch #generic

no-std atomic-traits

泛型原子操作的特性

4 个版本 (破坏性更新)

使用旧的 Rust 2015

0.4.0 2024年2月12日
0.3.0 2021年5月25日
0.2.0 2020年7月24日
0.1.0 2019年6月4日

#116算法

Download history 6584/week @ 2024-03-14 5923/week @ 2024-03-21 5513/week @ 2024-03-28 7408/week @ 2024-04-04 5840/week @ 2024-04-11 6844/week @ 2024-04-18 6451/week @ 2024-04-25 5213/week @ 2024-05-02 6602/week @ 2024-05-09 8683/week @ 2024-05-16 7145/week @ 2024-05-23 8020/week @ 2024-05-30 7782/week @ 2024-06-06 5859/week @ 2024-06-13 6590/week @ 2024-06-20 4569/week @ 2024-06-27

26,875 每月下载量
用于 23 个 crate (5 直接使用)

MIT/Apache

47KB
657

atomic-traits crate 文档 持续集成 MSRV

Rust 中泛型原子操作的特性。

兼容性

该包已针对稳定和夜间编译器进行了测试。

当前最低支持版本 (MSRV) 为 1.34.0

用法

将此添加到您的 Cargo.toml

[dependencies]
atomic-traits = "0.4"

并将此添加到您的 crate 根目录

extern crate atomic_traits;

示例

extern crate num_traits;
extern crate atomic_traits;

use std::sync::atomic::{AtomicUsize, Ordering};

use num_traits::One;
use atomic_traits::{Atomic, NumOps, fetch};

#[derive(Debug, Default)]
pub struct RefCnt<T>(T);

impl<T> RefCnt<T>
where
    T: Atomic + NumOps + Default,
    <T as Atomic>::Type: One
{
    pub fn inc(&self) -> <T as Atomic>::Type {
        self.0.fetch_add(<T as Atomic>::Type::one(), Ordering::Acquire)
    }

    pub fn dec(&self) -> <T as Atomic>::Type {
        self.0.fetch_sub(<T as Atomic>::Type::one(), Ordering::Release)
    }

    pub fn val(&self) -> <T as Atomic>::Type {
        self.0.load(Ordering::SeqCst)
    }
}

let refcnt = RefCnt::<AtomicUsize>::default();

assert_eq!(refcnt.inc(), 0);
assert_eq!(refcnt.dec(), 1);
assert_eq!(refcnt.val(), 0);

依赖项

~0–24MB
~330K SLoC