#send-sync #send #sync #worker-thread #values #type #different

diplomatic-bag

一个包装类型,允许您将 !Send 类型发送到不同的线程

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并发

Download history 18/week @ 2024-04-23 10/week @ 2024-05-28 6/week @ 2024-06-04 9/week @ 2024-06-11 9/week @ 2024-06-25 8/week @ 2024-07-02 34/week @ 2024-07-09 74/week @ 2024-07-16 18/week @ 2024-07-23

每月143 次下载

MIT/Apache

34KB
360

外交包

Crates.io API reference License Rust

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.0 许可证定义的任何有意提交以包含在作品中的贡献,都应按上述方式双重许可,不附加任何额外条款或条件。

依赖项

~395KB