5 个不稳定版本

0.3.1 2021年5月18日
0.3.0 2021年5月14日
0.2.1 2020年10月15日
0.2.0 2020年9月27日
0.1.0 2020年7月21日

#9 in #once-cell

Download history 24/week @ 2024-03-29 6/week @ 2024-04-05 3/week @ 2024-05-17 1/week @ 2024-05-24

111 每月下载量
2 个包中使用(通过 async-resource

MIT/Apache

33KB
811

option-lock

Rust Crate Rust Documentation

文档

围绕 Option 值的简单原子互斥锁,允许同步访问资源。

需要 Rust 版本 1.49 或更高版本。

许可协议

以下任一许可协议下发布:

任选其一。

贡献

除非你明确表示,否则任何有意提交以包含在你所定义的工作中的贡献,根据 Apache-2.0 许可协议,将双重许可如上所述,不附加任何额外条款或条件。


lib.rs:

此包定义了一个包装 Option 值的锁定结构。可以通过单个原子操作获取锁。 OptionLock 结构由一个原子 u8 变量和当前锁的值(可能为空)表示。它可以在 const 上下文中构建。

try_locktry_take 操作是非阻塞的,适用于在轮询 Future 中使用,但锁不能注册唤醒器或自动挂起当前线程。在这种情况下,可以使用传统的 Mutexasync-lock 包。

此结构允许多种使用模式。一个基本示例(在这种情况下可以用 AtomicI32 替换)

use option_lock::{OptionLock, OptionGuard};

static SHARED: OptionLock<i32> = OptionLock::new(0);

fn try_increase() -> bool {
  if let Ok(mut guard) = SHARED.try_lock() {
    let next = guard.take().unwrap() + 1;
    OptionGuard::replace(&mut guard, next);
    true
  } else {
    false
  }
}

代码仓库中还有其他示例。

此包使用 unsafe 代码块。当不使用 std 功能编译时,与 no_std 兼容。

依赖关系

~0–10MB
~90K SLoC