#async-task #async #safe #async-executor #async-test #future #select

safina-sync

在异步任务之间安全共享或发送数据的结构体

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 异步

Download history 52/week @ 2024-03-12 43/week @ 2024-03-19 60/week @ 2024-03-26 65/week @ 2024-04-02 35/week @ 2024-04-09 41/week @ 2024-04-16 53/week @ 2024-04-23 36/week @ 2024-04-30 44/week @ 2024-05-07 48/week @ 2024-05-14 42/week @ 2024-05-21 55/week @ 2024-05-28 33/week @ 2024-06-04 36/week @ 2024-06-11 52/week @ 2024-06-18 35/week @ 2024-06-25

166 每月下载量
14 个crate中使用 (5 个直接使用)

Apache-2.0

34KB
423

safina-sync

crates.io version license: Apache 2.0 unsafe forbidden pipeline status

在异步任务之间共享或发送数据的结构体。

它是安全异步运行时 safina 的一部分。

特性

  • Mutex 具有异步锁方法
  • oneshotsync_channel 具有异步和阻塞方法
  • 禁止(不安全代码)
  • 仅依赖于 std
  • 100% 测试覆盖率
  • safina-executor 或任何异步执行器兼容

限制

文档

https://docs.rs/safina-sync

示例

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.

替代方案

变更日志

  • v0.2.4
    • EqPartialEq 实现 ReceiverOneSenderSyncSender
    • 修复了在 Receiver 上调用 await 不会唤醒发送者的错误。
  • v0.2.3 修复竞争条件。
  • v0.2.2 修复 Linux 上的死锁问题。
  • v0.2.1
    • 添加了 sync_channelSyncSender
    • 添加了 Receiver::async_recv 以允许用户在没有编写难看的 (&mut receiver).await 的情况下等待。
    • 移除了 Receiver::blocking 并添加了 try_recvrecv 等。
  • v0.2.0 - 用 oneshotOneSender 和支持异步和阻塞读取的 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(将消息复制到每个接收者)

发布流程

  1. 编辑 Cargo.toml 并增加版本号。
  2. 运行 ./release.sh

许可:Apache-2.0

无运行时依赖