#async #sync #mutex #result #condvar

无 std rusturnate

同步或异步互斥锁,支持带或不带超时的

9 个版本

0.0.9 2024 年 5 月 18 日
0.0.8 2024 年 5 月 18 日
0.0.5 2024 年 4 月 28 日

#209并发

Download history 192/week @ 2024-04-14 227/week @ 2024-04-21 304/week @ 2024-04-28 129/week @ 2024-05-05 340/week @ 2024-05-12 120/week @ 2024-05-19 1/week @ 2024-05-26 87/week @ 2024-07-28

每月 87 次下载

MIT/Apache

80KB
2K SLoC

rusturnate

crates.io documentation pipeline status

概述

rusturnate 引入了一种类似于单元格的对象 Rusturn,它可以持有任意类型。它可以通过 Arcstatic 在线程或未来边界之间共享。

编辑器(MutexGuard

类似于 std::sync::MutexRusturn 通过获取一个 Editor(类似于 MutexGuard)来允许一次只有一个线程或未来访问其内容。在任何给定时刻,只能有一个编辑器实例访问 Rusturn 对象。要完成编辑,必须丢弃编辑器或在其上调用 .done()。之后,其他线程可以获取一个新实例的编辑器。如果在持有编辑器时发生 panic,它会被标记为 poisoned。尽管如此,访问仍然是可能的。但是,您需要处理由此产生的 PoisonError 并更新编辑器的值以清除其 poisoned 状态。仅当启用 std 功能时,auto-poisoning 才能工作。否则,您可以通过激活 manual_poisoninganytime_poisoning 功能来进行手动 poisoning。

手动 poisoning

待办事项

访问对象 Access

待办事项

等待结果

待办事项

功能标志

待办事项

unsafe 的使用

待办事项

分配详情

该包本身不执行任何堆分配。但是,如果启用了 suspending_with_timeout 功能,它将使用 futures-timer 包,该包确实执行堆分配。仅当在 async 上下文中带有超时来暂停执行时,才会使用 futures-timer

路线图

  • Rusturn/Editor 实现
  • sync/async 等待/排队
  • sync/async 超时
  • 自动/手动 poisoning
  • 完整的 README.md 说明
  • 公开方法的清晰文档
  • 内部方法的文档
  • 显式边缘情况测试
  • 更多的调试断言

许可协议

许可协议为Apache License, Version 2.0或MIT许可证之一。

依赖项

约265-730KB
~17K SLoC