2 个不稳定版本

0.1.0 2022 年 6 月 2 日
0.0.1 2022 年 6 月 2 日

#879 in 并发

MIT 许可证

8KB
154

syncell

Crates.io Docs.rs Build Status CodeCov.io

只是 Sync 的 RefCell 替代品。当您需要在任务/闭包之间共享值,并且已经知道或保证对该值的访问是安全的(例如,通过 choir 任务 依赖项)时很有用。

借用成本是单个原子操作,并且通过 LoomMiri 严格检查。

动机

Rust 已经有在线程之间共享值的工具,但我觉得它们都很复杂

可共享的可变容器存在是为了在存在别名的情况下以受控的方式允许可变性。无论是 Cell<T> 还是 RefCell<T> 都允许以单线程的方式执行此操作。然而,Cell<T>RefCell<T> 都不是线程安全的(它们没有实现 Sync)。如果您需要在多个线程之间进行别名和突变,则可以使用 Mutex<T>RwLock<T> 或原子类型。

来自 std::cell 文档的这一段提出了在 Sync 世界中使用基于锁的原始作为替代方案。但是,如果您只是需要共享而不需要锁定,并且仍然想要安全性呢?SynCell 就出现了。

依赖关系

~0–26MB
~328K SLoC