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 在 算法
26,875 每月下载量
用于 23 个 crate (5 直接使用)
47KB
657 行
atomic-traits
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