6 个版本
0.1.6 | 2023年9月21日 |
---|---|
0.1.5 | 2023年3月25日 |
0.1.3 | 2022年3月4日 |
0.1.2 | 2021年12月23日 |
#161 在 并发
每月3,929次下载
27KB
461 行
atomic_once_cell
atomic_once_cell
提供了两种新类型,AtomicOnceCell
和 AtomicLazy
,它们是线程安全且主要是无锁的,可以替换 core::lazy::OnceCell
和 core::lazy::Lazy
,适用于在 #[no_std]
环境中使用。
阻塞
由于 AtomicLazy
解引用不会失败,因此它不能是无锁的(如果您知道一种方法,请告诉我)。
这两种类型都可以以非阻塞方式使用,但有一些应该从中断处理程序或其他会导致死锁的上下文中使用的阻塞调用。阻塞基于 crossbeam::utils::Backoff
,并在 #[no_std]
环境中减少到自旋锁。
示例
AtomicOnceCell
use atomic_once_cell::AtomicOnceCell;
static CELL: AtomicOnceCell<String> = AtomicOnceCell::new();
fn main() {
CELL.set("Hello, World!".to_owned()).unwrap();
assert_eq!(*CELL.get().unwrap(), "Hello, World!");
}
AtomicLazy
use atomic_once_cell::AtomicLazy;
static LAZY: AtomicLazy<String> = AtomicLazy::new(|| "Hello, World!".to_owned());
fn main() {
assert_eq!(*LAZY, "Hello, World!");
}
有关更多详细信息,请参阅 文档。
使用方法
将此内容添加到您的 Cargo.toml 文件中
[dependencies]
atomic_once_cell = "0.1.6"
许可证
MPL-2.0
依赖项
~0.1–25MB
~337K SLoC