44 releases
0.16.1 | May 15, 2024 |
---|---|
0.16.0 | Jan 12, 2024 |
0.15.0 | Sep 16, 2023 |
0.14.1 | Jul 14, 2022 |
0.4.3 | Jun 21, 2017 |
#96 in Concurrency
7,944 downloads per month
Used in 126 crates
(13 directly)
160KB
3K
SLoC
shred - Shared resource dispatcher
This library allows to dispatch systems, which can have interdependencies, shared and exclusive resource access, in parallel.
Usage
extern crate shred;
use shred::{DispatcherBuilder, Read, Resource, ResourceId, System, SystemData, World, Write};
#[derive(Debug, Default)]
struct ResA;
#[derive(Debug, Default)]
struct ResB;
#[derive(SystemData)] // Provided with `shred-derive` feature
struct Data<'a> {
a: Read<'a, ResA>,
b: Write<'a, ResB>,
}
struct EmptySystem;
impl<'a> System<'a> for EmptySystem {
type SystemData = Data<'a>;
fn run(&mut self, bundle: Data<'a>) {
println!("{:?}", &*bundle.a);
println!("{:?}", &*bundle.b);
}
}
fn main() {
let mut world = World::empty();
let mut dispatcher = DispatcherBuilder::new()
.with(EmptySystem, "empty", &[])
.build();
world.insert(ResA);
world.insert(ResB);
dispatcher.dispatch(&mut world);
}
Please see the benchmark for a bigger (and useful) example.
Required Rust version
1.56.1 stable
Features
- lock-free
- no channels or similar functionality used (-> less overhead)
- allows both automated parallelization and fine-grained control
Contribution
Contribution is highly welcome! If you'd like another feature, just create an issue. You can also help out if you want to; just pick a "help wanted" issue. If you need any help, feel free to ask!
All contributions are assumed to be dual-licensed under MIT/Apache-2.
License
shred
is distributed under the terms of both the MIT
license and the Apache License (Version 2.0).
See LICENSE-APACHE and LICENSE-MIT.
Dependencies
~4MB
~76K SLoC