4 个版本
0.1.3 | 2021年3月23日 |
---|---|
0.1.2 | 2021年3月22日 |
0.1.1 | 2021年3月21日 |
0.1.0 | 2021年3月18日 |
#777 在 并发
14,132 每月下载量
在 13 个 Crates (5 直接) 中使用
13KB
58 行
safe-lock
一个简单的 SafeLock
结构。
用例
- 顺序运行测试
- 防止对原子值进行并发操作
- 防止对 Rust 运行时之外的数据和系统进行并发操作
功能
- 常量构造函数
- 仅依赖于
std
禁止(unsafe 代码)
- 100% 测试覆盖率
限制
- 不是一个
Mutex<T>
。不包含值。 - 未优化。在自旋锁中使用
AtomicBool
,而不是快速的操作系统锁。 - 不是公平锁。如果多个线程在循环中获取锁,有些可能永远无法获取。
替代方案
rusty-fork
- 在单独的进程中运行测试
std::sync::Mutex
- 是 Rust 标准库的一部分:经过良好审查、测试和维护。
- 使用快速操作系统锁
- 没有常量构造函数。见 rust#66806 和 const-eval#3。您可以使用不稳定
core::lazy::OnceCell
或各种unsafe
包:lazy_static
、once_cell
、lazycell
和conquer-once
。
parking_lot
- 代码编写良好。许多人希望它有一天会进入 Rust 标准库。
- 包含大量的
unsafe
try-lock
- 流行
- 无依赖,
no_std
- 使用
unsafe
ruspiro-lock
- 同步和异步锁
- 无依赖,
no_std
- 使用
unsafe
柔性锁
- 大量
不安全
- 使用快速操作系统锁
- 未维护
- 大量
相关Crate
safina-sync
提供了一个安全的异步Mutex
示例
让一些测试顺序执行,以免相互干扰
use safe_lock::SafeLock;
static LOCK: SafeLock = SafeLock::new();
[#test]
fn test1() {
let _guard = LOCK.lock();
// ...
}
[#test]
fn test2() {
let _guard = LOCK.lock();
// ...
}
Cargo Geiger 安全报告
Metric output format: x/y
x = unsafe code used by the build
y = total unsafe code found in the crate
Symbols:
🔒 = No `unsafe` usage found, declares #![forbid(unsafe_code)]
❓ = No `unsafe` usage found, missing #![forbid(unsafe_code)]
☢️ = `unsafe` usage found
Functions Expressions Impls Traits Methods Dependency
0/0 0/0 0/0 0/0 0/0 🔒 safe-lock 0.1.3
0/0 0/0 0/0 0/0 0/0
变更日志
- v0.1.3 - 增加测试覆盖率
- v0.1.2 - 使用
Acquire
和Release
排序 - v0.1.1 - 更新文档
- v0.1.0 - 初版
快乐的贡献者 🙂
修复错误和添加功能既容易又快。向我们发送拉取请求,我们打算
- 始终在24小时内响应
- 提供清晰具体反馈
- 立即为您的接受变更发布新版本
许可:Apache-2.0