10个版本
| 0.2.4 | 2022年3月31日 |
|---|---|
| 0.2.3 | 2022年3月17日 |
| 0.1.6 | 2022年2月25日 |
| 0.1.5 | 2021年3月26日 |
| 0.1.3 | 2020年12月29日 |
#1858 in 异步
166 每月下载量
在 14 个crate中使用 (5 个直接使用)
34KB
423 行
safina-sync
在异步任务之间共享或发送数据的结构体。
它是安全异步运行时 safina 的一部分。
特性
Mutex具有异步锁方法oneshot和sync_channel具有异步和阻塞方法禁止(不安全代码)- 仅依赖于
std - 100% 测试覆盖率
- 与
safina-executor或任何异步执行器兼容
限制
- 分配
- 没有const构造函数。内部使用
std::sync::Mutex,它没有const构造函数。请参阅 rust#66806 和 const-eval#3。您可以使用不稳定core::lazy::OnceCell或各种unsafecrate:lazy_static,once_cell,lazycell和conquer-once。
文档
示例
use std::sync::Arc;
use safina_async_test::async_test;
use safina_sync::Mutex;
let shared_counter: Arc<Mutex<u32>> = get_shared_data();
{
let mut counter_guard = shared_counter.lock().await;
*counter_guard += 1;
// some_async_fn().await; // Cannot await while holding a MutexGuard.
}
some_async_fn().await; // Await is ok after releasing MutexGuard.
替代方案
- async-lock
- 包含少量不安全代码
- futures-locks
- 包含少量不安全代码
- futures-util
- 非常受欢迎
- 充满不安全代码
- tokio-sync
- 非常受欢迎
- 快速
- 内部极其复杂
- 充满不安全代码
变更日志
- v0.2.4
- 为
Eq和PartialEq实现Receiver、OneSender和SyncSender。 - 修复了在
Receiver上调用await不会唤醒发送者的错误。
- 为
- v0.2.3 修复竞争条件。
- v0.2.2 修复 Linux 上的死锁问题。
- v0.2.1
- 添加了
sync_channel和SyncSender。 - 添加了
Receiver::async_recv以允许用户在没有编写难看的(&mut receiver).await的情况下等待。 - 移除了
Receiver::blocking并添加了try_recv、recv等。
- 添加了
- v0.2.0 - 用
oneshot、OneSender和支持异步和阻塞读取的Receiver替换Promise。 - v0.1.6 - 更新文档。
- v0.1.5 - 更新文档
- v0.1.4 - 更新文档,将
MutexGuard::new设置为非公开 - v0.1.3 - 修复 Promise 类型参数
- v0.1.2 - 添加 Promise
- v0.1.1 - 当有多个等待者时改进 Mutex 性能
- v0.1.0 - 首次发布版本
待办事项
- 添加
Barrier - 添加
RwLock - 添加
WaitableBool - 添加
UnboundedChannel - 添加
WaitableQueue(多个接收者) - 添加
UnboundedWaitableQueue - 添加
Topic(将消息复制到每个接收者)
发布流程
- 编辑
Cargo.toml并增加版本号。 - 运行
./release.sh
许可:Apache-2.0