#原子 #智能指针 #无锁 #内存 #性能

atomptr

一个安全的、无依赖的、用于类型原子智能指针的抽象

9 个稳定版本

1.4.1 2024年2月9日
1.3.0 2023年3月13日
1.2.1 2022年11月5日
1.1.0 2021年12月12日
1.0.0 2020年11月5日

#134 in 并发

Download history 6/week @ 2024-04-04 3/week @ 2024-04-18 2/week @ 2024-04-25 2/week @ 2024-06-06 3/week @ 2024-06-13

每月105次下载
supergit 中使用

GPL-3.0 或更高版

17KB
215

AtomPtr

一个安全的原子指针包装器,用于在顶部构建数据结构和无锁算法。仅使用 std 作为依赖。

标准库包含一个 AtomicPtr 类型,它本身使用起来非常不便捷,因为它处理原始指针。很容易误用此 API 并导致内存泄漏或双重释放。

此库对您如何使用数据做出了一些假设。此外,在没有某种其他内存管理策略的情况下使用原始指针是危险的。此 crate 使用 Arc<T> 来处理引用生命周期管理。在 AtomPtr<T> 中的数据也是 始终 堆分配的。

以下是一个简单的示例。

use atomptr::AtomPtr;

struct MyData { name: String }
let data = MyData { name: "Kookie".into() };

let a = AtomPtr::new(data);
println!("Name is: {}", a.get_ref().name);

let old_ref = a.swap(MyData { name: "Bob".into() });
println!("Name now is: {}, was {}", a.get_ref().name, old_ref.name);

因为所有数据都由 Arc<T> 内部包装,返回底层数据的引用并不意味着它从指针本身删除,或在 Ref<T> 范围退出后解除分配。另一个线程当然可以交换指针中包含的数据,这就是为什么 compare_exchange 需要一个先前持有的数据引用。

许可证

此微库是免费软件,并根据 GNU 通用公共许可证版本 3.0 或(根据您的选择)任何后续版本进行许可。

附加许可:若要提交到 Apple App Store:前提是您遵守 GPLv3 的规定(包括但不限于根据 GPLv3 第 6 条提供相应的源代码),qaul.net 开发者还授予您附加许可,通过 Apple App Store 传递程序的源代码版本以外的非源代码可执行版本,仅作为每个相关受覆盖工作的可执行版本,根据 Mozilla 公共许可证版本 2.0 进行传递。

此存储库中包含 GPL-3.0 和 MPL-2.0 许可证文本的副本。

无运行时依赖