5 个不稳定版本
0.3.1 | 2022年5月17日 |
---|---|
0.3.0 | 2022年5月17日 |
0.2.0 | 2021年6月27日 |
0.1.1 | 2021年2月13日 |
0.1.0 | 2021年2月13日 |
#560 在 并发
每月143 次下载
34KB
360 行
外交包
在 DiplomaticBag
中隐藏 !Send
和 !Sync
类型,它可以在线程之间自由发送。
let one = DiplomaticBag::new(|| Rc::new(RefCell::new(1)));
let two = DiplomaticBag::new(|| Rc::new(RefCell::new(2)));
let three: u8 = std::thread::spawn(|| {
one.as_ref()
.zip(two.as_ref())
.map(|(one, two)| *one.borrow() + *two.borrow())
.into_inner()
}).join()?;
(我不知道你为什么想这样做 ^,但我保证这对于不在 std 中的 !Send
类型很有用,例如,cpal 的 Stream
类型.)
工作原理
DiplomaticBags
内部的所有操作都发送到工作线程(家乡 😉)。这意味着值只会在一个线程上读取,这使得即使包含的类型不是,DiplomaticBag
也可以是 Send
。这种模型也有一些缺点,更多信息请参阅 文档。
许可证
以下任一许可证下发布
- Apache 许可证第 2 版 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义的任何有意提交以包含在作品中的贡献,都应按上述方式双重许可,不附加任何额外条款或条件。
依赖项
~395KB