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 · Rust 包仓库 6584/week @ 2024-03-14 · Rust 包仓库 5923/week @ 2024-03-21 · Rust 包仓库 5513/week @ 2024-03-28 · Rust 包仓库 7408/week @ 2024-04-04 · Rust 包仓库 5840/week @ 2024-04-11 · Rust 包仓库 6844/week @ 2024-04-18 · Rust 包仓库 6451/week @ 2024-04-25 · Rust 包仓库 5213/week @ 2024-05-02 · Rust 包仓库 6602/week @ 2024-05-09 · Rust 包仓库 8683/week @ 2024-05-16 · Rust 包仓库 7145/week @ 2024-05-23 · Rust 包仓库 8020/week @ 2024-05-30 · Rust 包仓库 7782/week @ 2024-06-06 · Rust 包仓库 5859/week @ 2024-06-13 · Rust 包仓库 6590/week @ 2024-06-20 · Rust 包仓库 4569/week @ 2024-06-27 · Rust 包仓库

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