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
111 每月下载量
在 2 个包中使用(通过 async-resource)
33KB
811 行
option-lock
文档
围绕 Option
值的简单原子互斥锁,允许同步访问资源。
需要 Rust 版本 1.49 或更高版本。
许可协议
以下任一许可协议下发布:
- Apache 许可协议第 2 版 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可协议 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非你明确表示,否则任何有意提交以包含在你所定义的工作中的贡献,根据 Apache-2.0 许可协议,将双重许可如上所述,不附加任何额外条款或条件。
lib.rs
:
此包定义了一个包装 Option
值的锁定结构。可以通过单个原子操作获取锁。 OptionLock
结构由一个原子 u8
变量和当前锁的值(可能为空)表示。它可以在 const
上下文中构建。
try_lock
和 try_take
操作是非阻塞的,适用于在轮询 Future
中使用,但锁不能注册唤醒器或自动挂起当前线程。在这种情况下,可以使用传统的 Mutex
或 async-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